как показать данные строки в столбце? - PullRequest
0 голосов
/ 22 сентября 2018

Я новичок в T-SQL, я застрял в проблеме, в которой каждый день должна производиться строка и таблица, которая состоит из следующих столбцов «ДАТА», «ЦЕНА», «КАТЕГОРИЯ 1», «КАТЕГОРИЯ 2».».Выходные данные должны создать столбец (комбинация «КАТЕГОРИЯ 1», «КАТЕГОРИЯ 2») и показать цену.Если цена недоступна, то должен быть показан ноль.Ниже приведен результат, который мне нужен для получения

TABLE
-----------------------------------------------
DATE      | PRICE    | CATEGORY 1 | CATEGORY 2
-----------------------------------------------
20171215    285            Books      Non-Fiction
20171212    390            Gaming     PlayStation 4
20171213    40             Antiques   collectables

ВЫХОДА

DATE       | Books- Non-Fiction | Gaming - PlayStation 4 | Antiques - collectables  
20171212          NULL                     390                   NULL
20171213          NULL                     NULL                  40
20171215          285                      NULL                  NULL

Возможно ли этого добиться?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

попробуйте это:

SELECT DATE,
    SUM(CASE WHEN [CATEGORY 1] = 'Books' and [CATEGORY 2] = 'Non-Fiction'  THEN PRICE ELSE null end) 'Books- Non-Fiction',
    SUM(CASE WHEN [CATEGORY 1] = 'Gaming' and [CATEGORY 2] = 'PlayStation 4'  THEN PRICE ELSE null  end) 'Gaming - PlayStation 4',
    SUM(CASE WHEN [CATEGORY 1] = 'Antiques' and [CATEGORY 2] = 'collectables'  THEN PRICE ELSE NULL end) 'Antiques - collectables'     
FROM YOURTABLE
GROUP BY DATE
ORDER BY DATE
0 голосов
/ 22 сентября 2018

Можно попробовать использовать агрегатную функцию условия

CREATE TABLE T(
   DATE INT,
   PRICE INT,
   [CATEGORY 1] VARCHAR(50),
   [CATEGORY 2] VARCHAR(50)

);

INSERT INTO T VALUES (20171215,285,'Books','Non-Fiction');
INSERT INTO T VALUES (20171212,390,'Gaming','PlayStation 4');
INSERT INTO T VALUES (20171213,40 ,'Antiques','collectables');

Запрос 1 :

SELECT DATE,
    SUM(CASE WHEN [CATEGORY 1] = 'Books' and [CATEGORY 2] = 'Non-Fiction'  THEN PRICE end) 'Books- Non-Fiction ',
    SUM(CASE WHEN [CATEGORY 1] = 'Gaming' and [CATEGORY 2] = 'PlayStation 4'  THEN PRICE  end) 'Gaming - PlayStation 4',
    SUM(CASE WHEN [CATEGORY 1] = 'Antiques' and [CATEGORY 2] = 'collectables'  THEN PRICE  end) 'Antiques - collectables'    
FROM T
GROUP BY DATE
ORDER BY DATE

Результаты :

|     DATE | Books- Non-Fiction  | Gaming - PlayStation 4 | Antiques - collectables |
|----------|---------------------|------------------------|-------------------------|
| 20171212 |              (null) |                    390 |                  (null) |
| 20171213 |              (null) |                 (null) |                      40 |
| 20171215 |                 285 |                 (null) |                  (null) |
...