Sql-Server

當 group by 包含多個具有相同值的行時選擇?

  • August 31, 2015

我正在嘗試編寫一個查詢,只要連接表 B 中的列包含表 A 中單個匹配行的多個不同值時,就從表 A 返回一行。(A -> B 是 1 -> 多關係。)我建立在上下文中展示這一點的 SQL 小提琴:http ://sqlfiddle.com/#!6/83952/1

在這個小提琴中,表的design列對於每個具有相同的列perf_ticket_type應該是相同的,但我試圖只選擇它沒有的實例。因此,對於3,我目前使用的查詢返回了多個唯一值。ticket_type``perf_id``perf_id``design

我想要的結果是表的兩列performance僅用於perf_id3,基於連接表中的多個designperf_id

過去我對 GROUP BY 的理解感到很沮喪,所以我不確定我是否可以在這裡做一些不同的事情來獲得我想要的結果。目前,我想我可以將小提琴中的內容選擇到臨時表中,然後使用 a對其進行**另一次選擇以獲得我想要的內容(根據選擇行,其中列包含多個記錄中的相同數據),但這似乎是一個額外的步驟。GROUP 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
;

引用自:https://dba.stackexchange.com/questions/112693