2017-12-27 28 views
1

複数のSQL CASE式から連結文字列を出力する方法を知りたい。SQL Server:CASEと文字列を連結

SELECT 
    u.UserId, 
    FirstName, 
    CASE u.access_b 
     WHEN '5000' THEN 'Active' 
     ELSE '' 
    END AS B, 
    CASE u.access_l 
     WHEN '2199-12-31' THEN 'Active' 
     ELSE '' 
    END AS LK 
FROM 
    Users u 
JOIN 
    userGroupMembership ugm ON u.userId = ugm.userId 
JOIN 
    usergroup ug ON ug.usergroupId = ugm.usergroupId 
WHERE 
    ug.usergroupId = 1220 
    AND (u.primaryType = 1 or u.primaryType = 2) 

私はこの取得しています:

この

は私のクエリです

enter image description here

だからではなく、2列BとLKを、私は意志新しい列を紹介したいと思いますアクセスレベルと呼ばれ、BがアクティブまたはLKがアクティブである場合、各プログラムに応じてBまたはLKを追加します。たとえば、Bのみがアクティブな場合、 'アクセスレベル'列の出力はBになります。両方のプログラムがアクティブな場合、出力は 'B、LK'になります.LKがアクティブの場合、列はLKの値を持ちます。

複数の大文字/小文字のクエリから列の値を連結するオプションは何ですか?

おかげで、Laziale

+0

。私はあなたがそのようにしたくないと思いますよね? – stb

+0

適切な方法で必要なデータを手に入れることができれば、どんなアプローチでも機能します。ありがとう – Laziale

答えて

1

あなたはとしてそれを行うことができます:私が正しくあなたを理解していれば、私はこれは、サブクエリなしで可能であるとは思わない

SELECT T.*, 
     CASE WHEN B = 'Active' AND LK = 'Active' THEN 'B, LK' 
      WHEN B = 'Active' THEN 'B' 
      WHEN LK = 'Active' THEN 'LK' 
      ELSE '' 
      END AS [Access Level] 
FROM 
(
    SELECT u.UserId, 
      FirstName, 
      case u.access_b 
      When '5000' then 'Active' 
      Else '' 
      End as B, 
      case u.access_l 
      when '2199-12-31' then 'Active' 
      else '' 
      end as LK 
    FROM Users u 
    join userGroupMembership ugm ON u.userId = ugm.userId 
    join usergroup ug ON ug.usergroupId = ugm.usergroupId 
    WHERE ug.usergroupId = 1220 and (u.primaryType = 1 or u.primaryType = 2) 
) T 
0

はあなたが記述の組み合わせをチェックし、適切な値を代入する第三CASE式を書きます。擬似コードで:

CASE 
    WHEN {B is active} AND {LK is active} THEN 'B, LK' 
    WHEN {B is active} THEN 'B' 
    WHEN {LK is active} THEN 'LK' 
    ELSE '' 
END 

CASE式は上から下へ順に評価され、条件が満たされているので、B及びLKの両方がアクティブである場合、最初の条件は、最初に会ったことながら、WHEN最初に解決します結果が返され、他の2つの条件も両方とも真であることは重要ではありません。

+0

私はそれが動作するとは思わない、私はエラーメッセージ156、レベル15、状態1、行48を取得しています 'is'キーワードの近くに構文が正しくありません。 – Laziale

+0

これはカットアンドペーストされたコードではありませんが、これは擬似コードです。中カッコ内の部分をクエリの実際のコードに置き換える必要があります。 –

+0

実際のコードを書いていただけますか、本当に感謝します。ありがとう – Laziale