Pobierz ROWS jako COLUMNS (SQL Server dynamiczne zapytanie PIVOT)

Używam MS SQL 2008 R2, mam trzy tabele z następującym schematem:

Tabela 1: Zawiera informacje o zmianie pracy dla każdego pracownika

CREATE TABLE workshift (
[ws_id] [bigint] NOT NULL,
[start_date] [datetime] NOT NULL,
[end_date] [datetime] NOT NULL,
[worker_id] [bigint] NOT NULL
)

INSERT INTO workshift VALUES (1, '2012-08-20 08:30:00', '2012-08-20 14:30:00', 1)
INSERT INTO workshift VALUES (2, '2012-08-20 14:30:00', '2012-08-20 22:30:00', 2)

Tabela 2: Zawiera nominały pieniężne

CREATE TABLE currency_denom (
[cd_id] [decimal](7, 2) NOT NULL,
[name] [nchar](100) NOT NULL
)

INSERT INTO currency_denom VALUES (1, '100.00')
INSERT INTO currency_denom VALUES (2, '50.00')
INSERT INTO currency_denom VALUES (3, '20.00')
INSERT INTO currency_denom VALUES (4, '10.00')
INSERT INTO currency_denom VALUES (5, '5.00')
INSERT INTO currency_denom VALUES (6, '1.00')

Tabela 3: Zawiera ilość każdego nominału, który pracownik otrzymał w każdej zmianie roboczej

CREATE TABLE currency_by_workshift (
[cd_id] [decimal](7, 2) NOT NULL,
[ws_id] [bigint] NOT NULL,
[qty] [int] NOT NULL
)

INSERT INTO currency_by_workshift VALUES (1, 1, 1)
INSERT INTO currency_by_workshift VALUES (2, 1, 2)
INSERT INTO currency_by_workshift VALUES (3, 1, 2)
INSERT INTO currency_by_workshift VALUES (2, 2, 3)
INSERT INTO currency_by_workshift VALUES (4, 2, 4)
INSERT INTO currency_by_workshift VALUES (5, 2, 2)

Muszę uzyskać wartości currency_by_workshift w kolumnach zamiast w wierszach, wraz z wartościami przesunięcia roboczego, czyli:

workshift |     workshift       |     workshift       | 100.00 | 50.00 | 20.00 | 10.00 | 5.00 | 1.00 
  ws_id   |     start_date      |     end_date        |        |       |       |       |      | 

    1     | 2012-08-20 08:30:00 | 2012-08-20 14:30:00 |    1   |   2   |   2   |   0   |   0  |   0
    2     | 2012-08-20 14:30:00 | 2012-08-20 22:30:00 |    0   |   2   |   0   |   4   |   2  |   0

Nie jestem w stanie użyć przypadku do zliczenia ilości dla każdego nominału waluty, ponieważ są one konfigurowalne, jeśli dodany zostanie nowy nominał, zapytanie powinno zostać zmodyfikowane. To samo dotyczy korzystania z funkcji PIVOT, czy się mylę?

Jak mogę uzyskać informacje w ten sposób?

questionAnswers(2)

yourAnswerToTheQuestion