結合されたテーブルBの列に、テーブルAの1つの一致する行の複数の異なる値が含まれている場合は常に、テーブルAから1行を返すクエリを記述しようとしています(A-> Bは1->多くの関係です)。これをコンテキストで示すSQLフィドル: http://sqlfiddle.com/#!6/83952/1
このフィドルでは、_perf_ticket_type
_テーブルのdesign
列は、同じ_ticket_type
_を持つすべての_perf_id
_で同じでなければなりませんが、そうでないインスタンスのみを選択しようとしていますt。したがって、_perf_id
_ 3の場合、現在使用しているクエリで複数の一意のdesign
が返されます。
結果として必要なのは、結合されたテーブルの_perf_id
_のperformance
の複数の値に基づいて、_perf_id
_ 3のみのdesign
テーブルの2つの列です。
私は過去にGROUP BYを理解することに不満を感じていたので、目的の結果を得るためにここで何か違うことをすることができるかどうかわかりません。現時点では、一時テーブルにあるフィドルにあるものを選択してからanotherselect onthatGROUP BY perf_id HAVING COUNT(*) > 1
を使用して、必要なものを取得します(- 列が複数のレコードに同じデータを含む行を選択 )のように、しかし、それは追加のステップのようです。
あなたの考えは正しいですが、HAVING COUNT(DISTINCT design) > 1
が必要です
このような:
WITH multi_design_perfs AS
(SELECT b.perf_id
FROM perf_ticket_type b
GROUP BY b.perf_id
HAVING COUNT(DISTINCT b.design) > 1
)
SELECT m.perf_id,
STUFF((select ', ' + CAST(b.design AS varchar(10))
FROM perf_ticket_type b
WHERE b.perf_id = m.perf_id
ORDER BY b.design
FOR XML PATH(''), TYPE).value('.','varchar(max)'),1,2,'')
FROM multi_design_perfs m
;