2

探しているテーブルに特定の情報があります。このクエリはそれを表示します。

SELECT StringValue FROM ClientSettings
WHERE Setting like 'CompanyDomain'
OR Setting like 'CompanyActivityEmail'
OR Setting like 'CompanySupportPhone'
OR Setting like 'CompanyName'

次の日付を返します。

StringValue
MyCompanyName
MyCompanyName@email.com
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

私が試していることが可能かどうか興味がありますか?

4

4 に答える 4

4

問題は、各行に 1 つの値のみを割り当て、他の変数を同時に上書きしないことだと思います。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-06T17:18:43.210 に答える
4

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 

ワーキングデモ

于 2012-04-06T17:19:13.170 に答える
1
SELECT setting, StringValue 
FROM ClientSettings
WHERE Setting in ('CompanyDomain'
                  ,'CompanyActivityEmail'
                  ,'CompanySupportPhone'
                  ,'CompanyName')

次に、結果をループして変数を割り当てます。

于 2012-04-06T17:17:09.830 に答える
0

別のアプローチとして、たとえば、 、などの値を持つ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);
于 2012-04-06T17:24:22.773 に答える