как создать (временную?) хранимую процедуру, чтобы помочь в создании сводного представления? - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть таблица представления, которая выглядит следующим образом:

enter image description here

И я начал создавать представление для суммирования по статусу для каждой валюты:

WITH C AS (SELECT * FROM CampaignsPublisherReportSummary)
SELECT
    'Total' T,
    SUM(CASE WHEN PayCurrency='USD' THEN Total END) USD,
    SUM(CASE WHEN PayCurrency='EUR' THEN Total END) EUR,
    SUM(CASE WHEN PayCurrency='GBP' THEN Total END) GBP,
    SUM(CASE WHEN PayCurrency='AUD' THEN Total END) AUD
FROM C
UNION
SELECT
    'ToBePaid' T,
    SUM(CASE WHEN PayCurrency='USD' THEN ToBePaid END) USD,
    SUM(CASE WHEN PayCurrency='EUR' THEN ToBePaid END) EUR,
    SUM(CASE WHEN PayCurrency='GBP' THEN ToBePaid END) GBP,
    SUM(CASE WHEN PayCurrency='AUD' THEN ToBePaid END) AUD
FROM C
GO

enter image description here

Я мог бы закончить и получить то, что я хочу, снова скопировав / вставив для каждого другого статуса (Неподтвержденный, Проверенный, и т. Д.), Но программист во мне хочет иметь какой-то видфункция, которая принимает имя статуса и запускает шаблонную версию запроса ...

ВОПРОС: Можно ли это сделать?Или есть другой лучший способ разбить информацию, которую я пропускаю?

ОБНОВЛЕНИЕ: Моя цель - получить что-то вроде этого:

SELECT * FROM #mytempfunc('Total')
UNION SELECT * FROM #mytempfunc('ToBePaid')
UNION ...

1 Ответ

2 голосов
/ 27 апреля 2011

Мне не совсем понятно, о чем вы спрашиваете; вам понадобится динамический SQL для выбора поля по строковому значению. Однако, если ваш список метрик является статическим (и это должно быть, исходя из представления), вы можете получить то, что вам нужно, или, по крайней мере, немного ближе, с помощью UNPIVOT:

SELECT PayCurrency, Metric, Amount
FROM CampaignsPublisherReportSummary
UNPIVOT (Amount FOR Metric IN (Paid, ToBePaid, Total)) AS X
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...