[英]Cast unique column values into separate “flag” columns
表“Groceries”具有“Name”和“Item”列,格式為:
*Name* | *Item*
Bill | Eggs
Bill | Milk
Sam | Eggs
Sam | Turkey
Sam | Butter
Josh | Milk
Josh | Butter
我希望概括一個查詢,將這些“Items”轉換為自己的列,作為標志。
我當前的查詢基本上是:
SELECT
MAX(CASE WHEN grocery.Item = 'Eggs' THEN 1 ELSE 0 END) 'Eggs',
MAX(CASE WHEN grocery.Item = 'Milk' THEN 1 ELSE 0 END) 'Milk',
MAX(CASE WHEN grocery.Item = 'Turkey' THEN 1 ELSE 0 END) 'Turkey',
MAX(CASE WHEN grocery.Item = 'Butter' THEN 1 ELSE 0 END) 'Butter'
FROM
Groceries grocery
哪個有效,但我想以某種方式概括它,以便不是列出每個唯一值,而是使用每個“MAX(CASE WHEN”邏輯),查詢會自動執行此操作,以查找grocery.Item列中的任何不同值。
有沒有辦法進行這種推廣,還是只需要列出每個值? 提前致謝。
首先創建select子句:
DECLARE @SELECT VARCHAR(MAX)=''
SELECT @SELECT = @SELECT + ',MAX(CASE WHEN grocery.Item =''' + ITEM + ''' THEN 1 ELSE 0 END) ['+ITEM+']'+CHAR(13) FROM (SELECT DISTINCT ITEM FROM Groceries) grocery
SELECT @SELECT = STUFF(@SELECT,1,1,'')
然后創建查詢並執行它:
DECLARE @QUERY NVARCHAR(MAX)='
SELECT '+@SELECT+' FROM Groceries grocery
'
EXEC sp_executesql @STMT = @QUERY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.