簡體   English   中英

將唯一列值轉換為單獨的“標志”列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM