早上好,劃分和排序在多聯報表
我爲我們的團隊儀表板許多指標組合成他們可以複製到Excel中,然後讓數據透視表做一些神奇的一個可執行的存儲過程的工作。這就是說,爲了這個問題,我只會引用單個較小的數據集來保持簡單。 他們想要標題和標籤的方式非常具體,所以這就是爲什麼第一對套書寫的方式。如果需要,我可以提供更多信息。
這裏是我想知道的問題,如果有人可以幫助我:
他們希望在查詢中的放電月份名稱。這很好,但是一旦我將排除日期(
projected_d
)添加到查詢中,我還必須使用group by
。這會導致沒有數據的任何Month
或Measure
從結果集中完全消失。我想爲這條線顯示一個零而不是消失。如果我從查詢中刪除month
和group by
,零將顯示。由於
Union All
,我不能使用Months
的ORDER BY
聲明。 我想在結果集中顯示月份名稱,但按MONTH編號排序。在普通查詢中,我通常不會遇到問題,但由於此查詢中的Union All
s,我在解決該問題的方式或方式方面存在問題。
下面是當前查詢和結果集:
USE COMPANY_VHR_PROD
GO
DECLARE @MINDOS DATE,
@MAXDOS DATE,
@PRTFSuccess INT,
@PRTFTotal INT
SET @MINDOS = '20170701'
SET @MAXDOS = '20170803'
SELECT @PRTFSuccess = COUNT(DISTINCT uniqueid_c)
FROM cd.enrollments
WHERE
program_c = 'PRTF'
AND level_c IN ('SIG', 'MOD')
AND projected_d BETWEEN @MINDOS AND @MAXDOS
SELECT @PRTFTotal = COUNT(DISTINCT uniqueid_c)
FROM cd.enrollments
WHERE
program_c = 'PRTF'
AND projected_d BETWEEN @MINDOS AND @MAXDOS
SELECT
'' AS "Program",
'' AS "Measurement",
'' AS "Month",
'' AS "Count or Total",
'' AS "Percentage or Average",
'' AS "YTD"
WHERE 1=0
UNION ALL
SELECT
'',
'',
'',
'',
'',
''
UNION ALL
SELECT
'PRTF',
'Client Response To Treatment',
'Month',
'Count',
'Percentage',
'YTD'
UNION ALL
SELECT
'PRTF' AS "Program",
CASE
WHEN e.level_c IS NULL THEN 'None Entered'
WHEN e.level_c = '' THEN 'None Entered'
WHEN e.level_c = 'SIG' THEN 'Significant Success Experienced'
WHEN e.level_c = 'MOD' THEN 'Moderate Success Experienced'
WHEN e.level_c = 'MILD' THEN 'Mild Success Experienced'
WHEN e.level_c = 'INS' THEN 'Insignificant Success Experienced'
ELSE e.level_c END AS "Success",
DATENAME(MONTH,e.projected_d),
CONVERT(VARCHAR,COUNT(DISTINCT e.uniqueid_c),1) AS "Count",
CONVERT(VARCHAR,CAST((COUNT(DISTINCT e.uniqueid_c)/CONVERT(DECIMAL(10,2),@PRTFTotal))*100 AS DECIMAL(10,2)),1),
CONVERT(VARCHAR,SUM(COUNT(DISTINCT e.uniqueid_c)) OVER (PARTITION BY e.level_c),1)
FROM cd.enrollments e
WHERE
e.program_c = 'PRTF'
AND e.projected_d BETWEEN @MINDOS and @MAXDOS
GROUP BY e.level_c, DATENAME(MONTH,e.projected_d)
UNION ALL
SELECT
'PRTF' AS "Program",
'Total Clients Discharging' AS "Client Response to Treatment",
'All',
CONVERT(VARCHAR,COUNT(DISTINCT e.uniqueid_c),1) AS "Count",
CONVERT(VARCHAR,CAST((COUNT(DISTINCT e.uniqueid_c)/CONVERT(DECIMAL(10,2),@PRTFTotal))*100 AS DECIMAL(10,2)),1),
CONVERT(VARCHAR,COUNT(DISTINCT e.uniqueid_c),1) AS "YTD"
FROM cd.enrollments e
WHERE
e.program_c = 'PRTF'
AND e.projected_d BETWEEN @MINDOS and @MAXDOS
理想我想它顯示這樣的事情,在這個順序:
PRTF - Insignificant Success - July - 0 - 0.00 - 0
PRTF - Insignificant Success - August - 0 - 0.00 - 0
PRTF - Mild Success - July - 0 - 0.00 - 0
PRTF - Mild Success - August - 0 - 0.00 - 0
PRTF - Moderate Success - July - 1 - 25.00 - 1
PRTF - Moderate Success - August - 0 - 0.00 - 1
PRTF - Significant Success - July - 2 - 50.00 - 3
PRTF - Significant Success - August - 1 - 25.00 - 3
PRTF - Total Clients - All - 4 - 100.00 - 4
誰能幫我嗎?
你是男人,傑森。謝謝。 – ct253704
如果爲將來面臨類似問題的其他人的利益解決問題,請致信/接受答案。 –