我试图用sql来做什么?
我有我正在寻找一个表中的特定信息,这个查询将显示它:我试图用sql来做什么?
SELECT StringValue FROM ClientSettings
WHERE Setting like 'CompanyDomain'
OR Setting like 'CompanyActivityEmail'
OR Setting like 'CompanySupportPhone'
OR Setting like 'CompanyName'
它返回以下日期:
StringValue
MyCompanyName
[email protected]
www.mycompanydomain.com
801-555-1212
我想现在设置这些达变量而不必做出4个独立的选择语句。
这里是我有什么,但它不工作,我希望它:
DECLARE @CompanyName VARCHAR(100)
DECLARE @CompanyDomain VARCHAR(100)
SELECT @CompanyName = StringValue, @CompanyDomain = StringValue FROM ClientSettings
WHERE Setting like 'CompanyName'
OR Setting like 'CompanyDomain'
SELECT @CompanyName
SELECT @CompanyDomain
我很好奇,如果我所想,甚至有可能?
我认为问题是您应该只为每行分配一个值,但不能同时覆盖其他变量。一个CASE
声明应该让你这样做:
DECLARE @CompanyName VARCHAR(100)
DECLARE @CompanyDomain VARCHAR(100)
SELECT
@CompanyName = CASE WHEN Setting = 'CompanyName'
THEN StringValue ELSE @CompanyName END,
@CompanyDomain = CASE WHEN Setting = 'CompanyDomain'
THEN StringValue ELSE @CompanyDomain END
FROM ClientSettings
WHERE Setting like 'CompanyName'
OR Setting like 'CompanyDomain'
SELECT @CompanyName
SELECT @CompanyDomain
你是男人,正是我所寻找的。我似乎永远不会(以)你的名字寿。再次感谢你! – 2012-04-06 17:20:23
@JamesWilson不客气......我想你只是不得不离开空间......'@ MichaelFredrickson'。 – 2012-04-06 17:22:22
我试过了。通常当我做'@ M'时,它会弹出一个列表来验证它是你。但是没有任何东西会弹出来,即使当我提交帖子时,@ MichaelFredrickson @MichaelFredrickson也会消失。哦,好吧,至少它仍然会提醒你评论。 :) – 2012-04-06 17:25:12
SELECT setting, StringValue
FROM ClientSettings
WHERE Setting in ('CompanyDomain'
,'CompanyActivityEmail'
,'CompanySupportPhone'
,'CompanyName')
然后循环结果并分配您的变量。
这种方式本来是有效的,只是试图处理SQL中的所有内容,谢谢你的答案。 – 2012-04-06 17:20:52
您可以使用PIVOT要做到这一点,但它有点哈克,因为它需要使用一个总的工作
DECLARE @CompanyName VARCHAR(100)
DECLARE @CompanyDomain VARCHAR(100)
SELECT @CompanyName = [CompanyName],
@CompanyDomain = [CompanyDomain]
FROM (SELECT setting,
stringvalue
FROM clientsettings
WHERE setting LIKE 'CompanyName'
OR setting LIKE 'CompanyDomain') AS sourcetable PIVOT (MAX(
stringvalue
) FOR setting IN ([CompanyName], [CompanyDomain])) AS pivottable
SELECT @CompanyName,
@CompanyDomain
我确定这样做会起作用,但数据库的兼容级别太低。我从来没有听说过像PIVOT这样的一些东西。谢谢您的回答。 – 2012-04-06 17:23:04
+1好用的'PIVOT' ... – 2012-04-06 17:23:09
@詹姆斯你应该与迈克尔的版本(因为它不是哈克),但你应该试试PIVOT一试。兼容性级别不会阻止新的语法。 – 2012-04-06 17:28:43
作为一种替代方法,您可以创建一个名为company_settings
的表格,其单列Setting
的值为'CompanyDomain'
,'CompanyActivityEmail'
等。
然后,你可以这样做:
SELECT StringValue FROM ClientSettings
WHERE Setting is in (select Setting from company_settings);
或者干脆:
SELECT StringValue
FROM ClientSettings a
JOIN company_settings b
ON (a.Setting=b.Setting);
只是注意:如果你正在做一个'LIKE“SomeText''没有任何通配符,你不妨做=。另外,如果你正在做'Setting ='CompanyName'OR Setting ='ComanyDomain'',你可以通过编写'Setting IN('CompanyName','CompanyDomain')''' – 2012-04-06 17:24:52
' =,并且出现错误,将它切换为与%一样,找出我的错误,删除了%,但从未将它切换回=。你对所有的事都是正确的,谢谢。 :) – 2012-04-06 17:26:50