2017-12-29 78 views
1

最初にオフにしてください、これを見ていただきありがとうございます。Transact-SQL Selectクエリ重複値を与える

私は3つのテーブルからデータを収集し、エンドユーザーが格納されたデータを見ることを可能にする参照チャートを作成しようとしています。 USERS:

は基本的に私は、この例の3つのテーブルを持っている

USER_PK USER_ID USER_NAME 
1 10000  Bob 
2 10001  Sally 
3 10003  Joe 
4 10004  Susan 

SKILL_TYPE:

SKILL_PK SKILL_NAME 
11 Point of Sale 
22 Digital Sales 
33 Customer Service 
44 Specialist Support 

SKILL_ASSOCIATION:

SKILL_ASSOC_PK SKILL_PK USER_PK START_DATE STOP_DATE Priority 
99 11 1 36526 500000 2 
88 11 2 36527 500000 3 
77 22 1 36526 500000 3 
66 33 3 36528 500000 1 
55 44 4 36525 500000 1 
444 33 4 36525 500000 4 

は(私が知っている私はおそらく壊れてきたいくつかのこのデータをカタログ化したルールSQL Expressでやったのですが、これは唯一の例です私が使っている実際のデータの十分ではなく代表)

マイセレクトクエリは、ユーザーごとに複数の行で、不要な結果を返します: 声明:

SELECT USERS.[USER_NAME], USERS.[USER_ID], 
    (CASE WHEN ST.SKILL_NAME ='Point of Sale' Then SA.[PRIORITY] END) AS 'POS', 

    (CASE WHEN ST.SKILL_NAME ='Digital Sales' Then SA.[PRIORITY] END) AS 'DS', 
    (CASE WHEN ST.SKILL_NAME ='Customer Service' Then SA.[PRIORITY] END) AS 'CS', 
    (CASE WHEN ST.SKILL_NAME ='Specialist Support' Then SA.[PRIORITY] END) AS 'Spec' 
    FROM USERS 
    INNER JOIN [dbo].[SKILL_ASSOCIATION] AS SA ON SA.USER_PK = USERS.USER_PK 
    INNER JOIN SKILL_TYPE AS ST ON ST.SKILL_PK = SA.SKILL_PK 

結果:

USER_NAME USER_ID POS DS CS Spec 
Bob 10000  2 NULL NULL NULL 
Sally 10001  3 NULL NULL NULL 
Bob 10000  NULL 3 NULL NULL 
Joe 10003  NULL NULL 1 NULL 
Susan 10004  NULL NULL NULL 1 
Susan 10004  NULL NULL 4 NULL 

をI同様の結果を持つ別個のものも使用しようとしました。 望ましい結果:

NAME ID POS DS CS Spec 
Bob  1 2 3  
Sally 2 3   
Joe     1 
Susan    4 1 

私は、このSQL Serverとの非常に限られたクエリのアクセス権を持ち、作成/変更、または私の目的を達成するために、そこから削除することはできません。

ガイダンスをいただければ幸いです。

おかげで、 スティーブン

+0

はあなたにヨーゲッシュシャルマをありがとうございました!書式設定を理解できませんでした。 –

答えて

1

あなたの予想出力はCASE式のそれぞれのMAXを取るとともに、ユーザーによる凝集が動作する必要があることを意味します

SELECT 
    u.[USER_NAME], 
    u.[USER_ID], 
    MAX(CASE WHEN ST.SKILL_NAME = 'Point of Sale' THEN SA.[PRIORITY] END) AS POS, 
    MAX(CASE WHEN ST.SKILL_NAME = 'Digital Sales' THEN SA.[PRIORITY] END) AS DS, 
    MAX(CASE WHEN ST.SKILL_NAME = 'Customer Service' THEN SA.[PRIORITY] END) AS CS, 
    MAX(CASE WHEN ST.SKILL_NAME = 'Specialist Support' THEN SA.[PRIORITY] END) AS Spec 
FROM USERS u 
INNER JOIN [dbo].[SKILL_ASSOCIATION] AS SA 
    ON SA.USER_PK = u.USER_PK 
INNER JOIN SKILL_TYPE AS ST 
    ON ST.SKILL_PK = SA.SKILL_PK 
GROUP BY 
    u.[USER_NAME], 
    u.[USER_ID]; 
+0

速かった私の善良さ!それがまさに私が探しているものです。ありがとうございました!タイマーがなくなると私はAcceptedとマークします。 –

関連する問題