Sqlite
在表數據爭吵,sqlite,對組計數的子查詢
我試圖從中得到,
進口
Ntype |Color|Code :-------|:----|:--- example1|Blue |xyz example1|Red |xyx example2|Black|zyz example3|Grey |zyz
對此,
出口
Name |Option_Name|Option_Value|Code :-------|:----------|:-----------|:--- example1|Default |Default | example1|Color |Blue |xyz example1|Color |Red |xyx example2|Default |Default |zyz example3|Default |Default |zyz
我一直堅持的部分是,如何對名稱的計數進行子查詢,結果包含比我開始時更多的行?根據名稱是否被多次計算來處理。
首先,它計算每個 Ntype 有多少行。(我添加了 MIN(Code) 只是為了避免在最終結果中再次加入。)
SELECT Ntype, COUNT(*) AS cnt, MIN(Code) AS Code FROM tbl GROUP BY Ntype; GO Ntype | cnt | Code :------- | --: | :--- example1 | 2 | xyx example2 | 1 | zyz example3 | 1 | zyz
然後,恕我直言,您需要兩個查詢的聯合。“預設”值的第一個。每個不同的 Ntype 一個行,另一個用於 count > 1 的行。
WITH c1 AS ( SELECT Ntype, COUNT(*) AS cnt, MIN(Code) AS Code FROM tbl GROUP BY Ntype ) SELECT Ntype, 'Default' AS Option_Name, 'Default' AS Option_Value, CASE cnt WHEN 1 THEN Code ELSE '' END AS Code FROM c1 UNION ALL SELECT tbl.Ntype, 'Color' as Option_Name, tbl.Color as Option_Value, tbl.Code FROM c1 JOIN tbl ON c1.Ntype = tbl.Ntype WHERE c1.cnt > 1 ORDER BY Ntype, Code; GO
這是最終輸出:
類型 | 選項名稱 | 選項值 | 程式碼 :------- | :---------- | :----------- | :--- 範例1 | 預設 | 預設 | 範例1 | 顏色 | 紅色 | xyx 範例1 | 顏色 | 藍色 | xyz 範例2 | 預設 | 預設 | 齊茲 範例3 | 預設 | 預設 | 齊茲
*dbfiddle [here](http://dbfiddle.uk/?rdbms=sqlite_3.8&fiddle=4bcdd603d967452d434f849f67d33f1d)*