Как получить этот вывод, используя SQL-запрос - PullRequest
1 голос
/ 05 сентября 2011

Нужна помощь с этим.

У меня есть эта таблица данных для иллюстрации. (Есть много других строк данных с разными клиентами. Учитывайте это в ответе)

RowID   Customer     Category     Date       Figure1
  1     Cust1        Week 1       Jun-11     10
  2     Cust1        Week 2       Jun-11     20
  3     Cust1        Week 3       Jun-11     30
  4     Cust1        Week 4       Jun-11     40
  5     Cust1        Actual       Jun-11     200
  6     Cust1        Forecast     Jun-11     100
  7     Cust2        Forecast     Jun-11     100

Я бы хотел, чтобы он отображал только категорию Actual (строка 5), включая RowID в сводной категории, как показано ниже

Это должен быть вывод.

RowID   Customer Date     Week1  Week2  Week3   Week4   Actual  Forecast
   5    Cust1    Jun-11   10     20     30      40      200     100

Любая помощь будет оценена.

Заранее спасибо.

Пробовал Pivot, но это дает мне то, чего я не хочу.

RowID   Customer Date     Week1  Week2  Week3   Week4   Actual  Forecast
   1    Cust1    Jun-11   10     null   null    null    null    null
   2    Cust1    Jun-11   null   20     null    null    null    null
   3    Cust1    Jun-11   null   null   30      null    null    null
   4    Cust1    Jun-11   null   null   null    40      null    null
   5    Cust1    Jun-11   null   null   null    null    200     null
   6    Cust1    Jun-11   null   null   null    null    null    100

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

PIVOT хорошо, но вам нужно GROUP BY и SUM впоследствии.

В качестве альтернативы, вы можете самостоятельно ПРИСОЕДИНЯТЬСЯ по всем различным критериям кода, но это может быть немного менее поддерживаемымчем иметь список значений в одном месте, как вы можете с PIVOT.

0 голосов
/ 05 сентября 2011

Попробуйте это решение на основе двух параметров (@MyCustomer & @MyDate):

DECLARE @MyCustomer VARCHAR(10) = 'Cust1'
    ,@MyDate VARCHAR(10) = 'Jun-11';

SELECT pvt.*
FROM
(
SELECT  t.Customer, t.Date, t.Category, t.Figure1
FROM    MyTable t
WHERE   t.Customer = @MyCustomer AND t.[Date] = @MyDaye
) src
PIVOT ( SUM(src.Figure1) FOR src.Category IN ([Week 1], [Week 2], [Week 3], [Week 4], [Actual], [Forecast]) ) pvt

Основная идея состоит в том, чтобы отфильтровать в src производной таблице только те строки и столбцы, которые вам нужны для сводки, ничего более или менее.

0 голосов
/ 05 сентября 2011

Вы можете сделать это следующим образом:

    SELECT
        RowID,
        Customer,
        Date,
        (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 1') AS Week1,
        (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 2') AS Week2,
        (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 3') AS Week3,
        (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Week 4') AS Week4,
        (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Actual') AS Actual,
        (SELECT Figure1 FROM sotest WHERE Customer = 'Cust1' AND Date = 'Jun-11' AND Category = 'Forecast') AS Forecast

    FROM
        sotest

    WHERE
        Customer = 'Cust1'
        AND Date = 'Jun-11'
        AND Category = 'Actual'

Должно быть довольно легко заключить в хранимую процедуру, где вы можете передать параметры CustomerID и Date в.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...