2016-12-07 13 views
2

私はテーブルがMyTableであり、その下に3つの主要なカラムがあります。varcharカラムのMin()およびMax()の不一致動作

ContactId | QuestionId | ResponseValue 
    8   31   Ankush Agro 
    8   32   Pramod Gho 
    9   31   Pawansut K S K 
    9   32   sandip mor 

上記のResponseValueカラムは動的カラムです。すなわち 質問IDから質問IDを参照する回答値が変化します。言い換えれば

これはだから今、私の要件は、私は列ヘッダーとして質問欄 に各質問の名前を必要とすることで、テーブルが間接的に何を表すか

ContactId | Question |  ResponseValue 
    8   Shop Name   Ankush Agro 
    8   Owner Name   Pramod Gho 
    9   Shop Name   Pawansut K S K 
    9   Owner Name   sandip mor 

です。すなわちPivotショップ名とオーナー名の表。 集約関数は、私はこのようなmin()Max()機能

を使用しています非数値列に使用することはできませんので、

Select 
max(Case MyTable.QuestionID When '31' Then ResponseValue else 'N/A' End) [Shop Name], 
max(Case MyTable.QuestionID When '32' Then ResponseValue else 'N/A' End) [Owner Name] 
from MyTable 
left join QuestionMaster on QuestionMaster.QuestionId= MyTable.QuestionId 
where MyTable.QuestionId in (31,32) 

私は上Max()を使用する場合、私は直面しています問題は、 ですshopname第2レコードのショップ名の値のみが表示されますが、最初のレコードは 'N/A'です。

Shop Name  | Owner Name 
Pawansut K S K  sandip mor 
    N/A    Pramod Gho 

と私はMin()その逆が起きたときに使用

Shop Name  | Owner Name 
    N/A    sandip mor 
Ankush Agro   Pramod Gho 

は、いくつかのいずれかは私になぜこれが起こっているの洞察力を与えることはできますか?

これは私が私のクエリはあなたのピボットクエリが問題を抱えている結果セットに

Shop Name  | Owner Name 
    Pawansut K S K  sandip mor 
    Ankush Agro   Pramod Gho 
+0

:あなたはCASE式のELSE部分でNULL値を使用する必要があります。 –

+0

予想される_exact_出力を表示してください。ピボットクエリの仕組みについては混乱していると思います。 –

+0

@TimBiegeleisen以前に投稿した回答は私のために働いた –

答えて

3

を与えたい方法です。 SQL Serverを使用しているように見えるので、私は、MySQLのタグを削除

SELECT COALESCE(MAX(CASE WHEN t1.QuestionID = '31' 
         THEN t1.ResponseValue ELSE NULL END), 'N/A') AS [Shop Name], 
     COALESCE(MAX(CASE WHEN t1.QuestionID = '32' 
         THEN t1.ResponseValue ELSE NULL END), 'N/A') AS [Owner Name] 
FROM MyTable t1 
LEFT JOIN QuestionMaster t2 
    ON t2.QuestionId = t1.QuestionId 
WHERE t1.QuestionId IN (31, 32) 
GROUP BY t1.QuestionId 
関連する問題