Bonjour,Partitionnement et commande dans les états de l'Union multiples
Je travaille sur une combinaison de plusieurs paramètres pour notre équipe de dashboarding dans une procédure stockée exécutable unique qu'ils pourraient copier dans Excel, puis laissez-les tableaux croisés dynamiques font quelque chose de magique. Cela étant dit, dans l'intérêt de cette question, je ne ferai référence qu'à un seul ensemble de données plus petit pour une seule mesure afin de rester simple. La façon dont ils veulent les en-têtes et des étiquettes est très spécifique pour c'est pourquoi les deux premiers jeux sont écrits comme ils sont. Je peux donner plus d'informations si nécessaire.
est ici les questions que je me demande si quelqu'un pourrait me aider:
Ils veulent que le nom du mois de décharge dans la requête. C'est bien, mais une fois que j'ajouter la date de sortie (
projected_d
) dans la requête que je dois utiliser aussi ungroup by
. Ceci est alors à l'origine uneMonth
ouMeasure
sans données à disparaître complètement du jeu de résultats. Je voudrais montrer un zéro pour cette ligne plutôt que de disparaître. les zéros montreront si je retire lamonth
etgroup by
de la requête.Je ne peux pas utiliser une instruction
ORDER BY
pour laMonths
en raison de laUnion All
. Je souhaite afficher le nom du mois dans le jeu de résultats mais le commander par numéro MONTH. Je ne généralement pas les problèmes qui font que dans les requêtes normales, mais en raison desUnion All
s dans cette requête que j'ai des problèmes sur le lieu ou la façon de faire ce travail.
Voici la requête en cours et le jeu de résultats:
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
Idéalement je voudrais qu'il montre quelque chose comme ça, dans cet ordre:
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
Quelqu'un peut m'aider?
Vous êtes l'homme, Jason. Je vous remercie. – ct253704
S'il vous plaît upvote/accepter la réponse si elle résout la question pour le bénéfice d'autres personnes confrontées à un problème similaire à l'avenir. –