Преобразуйте уникальные значения столбцов в отдельные столбцы типа «флаг» - PullRequest
0 голосов
/ 21 июня 2019

С таблицей «Продовольственные товары», имеющей столбцы «Имя» и «Предмет», в формате:

*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(СЛУЧАЙ, КОГДА "логика для каждого из них, запрос делает это автоматически для тех различных значений, которые находятся в столбце бакалеи. Элемент.

Есть ли способ сделать это обобщение, или мне просто придется перечислить каждоезначение? Спасибо заранее.

1 Ответ

0 голосов
/ 21 июня 2019

Прежде всего создайте предложение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...