表格"杂货"包含"名称"和"项目"列,格式为:
*Name* | *Item*
Bill | Eggs
Bill | Milk
Sam | Eggs
Sam | Turkey
Sam | Butter
Josh | Milk
Josh | Butter
我希望概括一个查询,将这些"项目"投射到它们自己的列中,充当标志。
我目前的查询基本上是:
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"逻辑(,而是自动为杂货店中的任何不同值执行此操作。项目列。
有没有办法进行这种概括,或者我只需要列出每个值?提前谢谢。
首先创建 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