如何在SQL Server中交叉表查询以列显示月份
因此,我想要的结果是保留当前列,但不是将月份全部放在一列中,而是将月份放在标题行中。如何在扩展的drop表中实现这一点。只需在一个select查询中为每个月添加条件CASE/WHEN即可输出月份列。顺便说一下,你没有在那些月份专栏中提到你想要什么。下面我使用计数,但考虑任何其他聚集体。如何在SQL Server中交叉表查询以列显示月份,sql,sql-server-2008,Sql,Sql Server 2008,因此,我想要的结果是保留当前列,但不是将月份全部放在一列中,而是将月份放在标题行中。如何在扩展的drop表中实现这一点。只需在一个select查询中为每个月添加条件CASE/WHEN即可输出月份列。顺便说一下,你没有在那些月份专栏中提到你想要什么。下面我使用计数,但考虑任何其他聚集体。 Time Loc_Acronym Location NPI_Number Provider Visits Total_RVUs Avg RV
Time Loc_Acronym Location NPI_Number Provider Visits Total_RVUs Avg RVU Month
2015-06-01 ROS LOVELACE REG MED CTR- ROSWELL 1538198924 ARRINGTON, ALAN H M.D. 1 4.01 4.010000 June
2015-07-01 ROS LOVELACE REG MED CTR- ROSWELL 1982631560 ATKINS, ARNOLD M.D. 1 4.01 4.010000 July
2015-09-01 ROS LOVELACE REG MED CTR- ROSWELL 1982631560 ATKINS, ARNOLD M.D. 1 1.64 1.640000 September
2015-06-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 303 799.92 2.640000 June
2015-07-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 211 571.48 2.710000 July
2015-08-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 235 664.02 2.830000 August
2015-09-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 257 691.11 2.690000 September
这就是我得到的结果。尽管我希望包含一个case语句,该语句与where子句日期是动态的,在该范围内只输出了几个月。我可以接受这个结果。谢谢大家的意见。您能告诉我们您想要的结果会是什么样子吗?另外,请阅读并感谢您的帮助两个问题:我还需要声明开始日期和停止日期吗?我想是的,因为我在where子句中有它。第二个问题一旦我声明了开始和停止日期,我就得到了一个语法错误,在As子句测试查询之前有一个带括号的case语句,没有那些似乎可以过滤特定记录集的日期。至于语法问题…嗯…尝试在ELSE子句中使用零而不是空。另外,我刚刚意识到,时间列先减去,然后再加上零个月,参数在DateAdd函数中被反转。只需使用dttdat字段的月份。请参见编辑。
Time Loc_Acronym Location NPI_Number Provider Visits Total_RVUs Avg RVU Month
2015-06-01 ROS LOVELACE REG MED CTR- ROSWELL 1538198924 ARRINGTON, ALAN H M.D. 1 4.01 4.010000 June
2015-07-01 ROS LOVELACE REG MED CTR- ROSWELL 1982631560 ATKINS, ARNOLD M.D. 1 4.01 4.010000 July
2015-09-01 ROS LOVELACE REG MED CTR- ROSWELL 1982631560 ATKINS, ARNOLD M.D. 1 1.64 1.640000 September
2015-06-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 303 799.92 2.640000 June
2015-07-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 211 571.48 2.710000 July
2015-08-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 235 664.02 2.830000 August
2015-09-01 ROS LOVELACE REG MED CTR- ROSWELL NULL CORRIZ, STEPHEN M D.O. 257 691.11 2.690000 September
SELECT
DATEADD(MONTH, 0, DATEDIFF(MONTH, 0, dmtrans.DTTDAT)) AS 'time',
dmtrans.DTACRO as 'Loc_Acronym',
dmloc.DLONAME as 'Location',
dmdoctr.DDRNPI as 'NPI_Number',
(COALESCE(dmdoctr.DDRNAME,'')+' '+COALESCE(dmdoctr.DDRTITL,'')) as Provider,
sum(dmtrans.DTCNTR) as 'Visits',
sum(RVU.TotalRVU) as 'Total_RVUs',
(nullif(sum(RVU.TotalRVU),0)/nullif(sum(dmtrans.DTCNTR),0)) as 'Avg_RVU',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 1 THEN 1 ELSE 0) As 'January',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 2 THEN 1 ELSE 0) As 'February',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 3 THEN 1 ELSE 0) As 'March',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 4 THEN 1 ELSE 0) As 'April',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 5 THEN 1 ELSE 0) As 'May',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 6 THEN 1 ELSE 0) As 'June',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 7 THEN 1 ELSE 0) As 'July',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 8 THEN 1 ELSE 0) As 'August',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 9 THEN 1 ELSE 0) As 'September',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 10 THEN 1 ELSE 0) As 'October',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 11 THEN 1 ELSE 0) As 'November',
SUM(CASE WHEN DatePart(MONTH, dmtrans.DTTDAT) = 12 THEN 1 ELSE 0) As 'December'
FROM
dmtrans
LEFT OUTER JOIN
dmloc ON dmtrans.DTACRO = dmloc.DLOACRO
AND dmtrans.DTLOC = dmloc.DLONUM
LEFT OUTER JOIN
cptxref ON dmtrans.DTPROC = cptxref.chcod
LEFT OUTER JOIN
dmdoctr ON dmtrans.DTACRO = dmdoctr.DDRACRO
AND dmtrans.DTLOC = dmdoctr.DDRLOC
AND dmtrans.DTRPTDR = dmdoctr.DDRNUM
LEFT OUTER JOIN
RVU ON cptxref.chmcd1 = RVU.cptcode
AND RVU.recordname = '2006'
WHERE (dmtrans.DTTTYP = 'C' )
AND (dmtrans.DTTDAT >= @StartDate)
AND (dmtrans.DTTDAT <= @StopDate)
AND (dmtrans.DTMODF <> '*p')
AND (dmtrans.DTACRO = 'ROS')
GROUP BY
dmdoctr.DDRNAME, dmdoctr.DDRNPI, dmtrans.DTTDAT,
dmtrans.DTACRO, dmloc.DLONAME, dmdoctr.DDRTITL,
dmtrans.DTPCPNO, dmtrans.DTRPTDR, dmtrans.DTCNTR
ORDER BY
dmdoctr.DDRNAME, dmtrans.DTACRO, dmtrans.DTTDAT
USE cfsdwhd;
WITH MyCTE
AS
(
SELECT Dateadd(MONTH, Datediff(MONTH, 0, dmtrans.DTTDAT), 0) AS StartOfMonth,
dmtrans.DTACRO AS 'Loc_Acronym',
dmloc.DLONAME AS 'Location',
dmdoctr.DDRNPI AS 'NPI_Number',
( COALESCE(dmdoctr.DDRNAME, '') + ' '
+ COALESCE(dmdoctr.DDRTITL, '') ) AS Provider,
Sum(dmtrans.DTCNTR) AS 'Visits',
Sum(RVU.TotalRVU) AS 'Total_RVUs',
ISNULL(( NULLIF(Sum(RVU.TotalRVU), 0) / NULLIF(Sum(dmtrans.DTCNTR), 0) ), 0.00) AS 'Avg_RVU'
FROM dmtrans
LEFT OUTER JOIN dmloc
ON dmtrans.DTACRO = dmloc.DLOACRO
AND dmtrans.DTLOC = dmloc.DLONUM
LEFT OUTER JOIN cptxref
ON dmtrans.DTPROC = cptxref.chcod
LEFT OUTER JOIN dmdoctr
ON dmtrans.DTACRO = dmdoctr.DDRACRO
AND dmtrans.DTLOC = dmdoctr.DDRLOC
AND dmtrans.DTRPTDR = dmdoctr.DDRNUM
LEFT OUTER JOIN RVU
ON cptxref.chmcd1 = RVU.cptcode
AND RVU.recordname = '2006'
WHERE ( dmtrans.DTTTYP = 'C' )
AND ( dmtrans.DTTDAT >= '05/01/2015')
AND ( dmtrans.DTTDAT <= '09/30/2015')
AND ( dmtrans.DTMODF <> '*p' )
AND ( dmtrans.DTACRO = 'MOR' )
GROUP BY dmtrans.DTACRO,
dmloc.DLONAME,
dmdoctr.DDRNPI,
( COALESCE(dmdoctr.DDRNAME, '') + ' '
+ COALESCE(dmdoctr.DDRTITL, '') ) ,
Dateadd(MONTH, Datediff(MONTH, 0, dmtrans.DTTDAT), 0)
)
SELECT 1 As SortOrder, T1.Loc_Acronym,T1.Location,T1.NPI_Number,T1.Provider,'Sum Of Visits' AS [Values],
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 1 THEN Visits ELSE 0 END) AS 'January',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 2 THEN Visits ELSE 0 END) AS 'February',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 3 THEN Visits ELSE 0 END) AS 'March',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 4 THEN Visits ELSE 0 END) AS 'April',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 5 THEN Visits ELSE 0 END) AS 'May',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 6 THEN Visits ELSE 0 END) AS 'June',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 7 THEN Visits ELSE 0 END) AS 'July',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 8 THEN Visits ELSE 0 END) AS 'August',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 9 THEN Visits ELSE 0 END) AS 'September',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 10 THEN Visits ELSE 0 END) AS 'October',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 11 THEN Visits ELSE 0 END) AS 'November',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 12 THEN Visits ELSE 0 END) AS 'December'
from mycte T1
GROUP BY T1.Loc_Acronym,T1.Location,T1.NPI_Number,T1.Provider
UNION ALL
SELECT 2 As SortOrder, T1.Loc_Acronym,T1.Location,T1.NPI_Number,T1.Provider,'Sum Of Total_RVUs' AS [Values],
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 1 THEN Total_RVUs ELSE 0 END) AS 'January',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 2 THEN Total_RVUs ELSE 0 END) AS 'February',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 3 THEN Total_RVUs ELSE 0 END) AS 'March',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 4 THEN Total_RVUs ELSE 0 END) AS 'April',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 5 THEN Total_RVUs ELSE 0 END) AS 'May',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 6 THEN Total_RVUs ELSE 0 END) AS 'June',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 7 THEN Total_RVUs ELSE 0 END) AS 'July',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 8 THEN Total_RVUs ELSE 0 END) AS 'August',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 9 THEN Total_RVUs ELSE 0 END) AS 'September',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 10 THEN Total_RVUs ELSE 0 END) AS 'October',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 11 THEN Total_RVUs ELSE 0 END) AS 'November',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 12 THEN Total_RVUs ELSE 0 END) AS 'December'
from mycte T1
GROUP BY T1.Loc_Acronym,T1.Location,T1.NPI_Number,T1.Provider
UNION ALL
SELECT 3 As SortOrder, T1.Loc_Acronym,T1.Location,T1.NPI_Number,T1.Provider,'Sum Of Avg RVU' AS [Values],
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 1 THEN Avg_RVU ELSE 0 END) AS 'January',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 2 THEN Avg_RVU ELSE 0 END) AS 'February',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 3 THEN Avg_RVU ELSE 0 END) AS 'March',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 4 THEN Avg_RVU ELSE 0 END) AS 'April',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 5 THEN Avg_RVU ELSE 0 END) AS 'May',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 6 THEN Avg_RVU ELSE 0 END) AS 'June',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 7 THEN Avg_RVU ELSE 0 END) AS 'July',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 8 THEN Avg_RVU ELSE 0 END) AS 'August',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 9 THEN Avg_RVU ELSE 0 END) AS 'September',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 10 THEN Avg_RVU ELSE 0 END) AS 'October',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 11 THEN Avg_RVU ELSE 0 END) AS 'November',
SUM(CASE WHEN DatePart(MONTH, DATEADD(MONTH, DATEDIFF(MONTH, 0, StartOfMonth), 0)) = 12 THEN Avg_RVU ELSE 0 END) AS 'December'
from mycte T1
GROUP BY T1.Loc_Acronym,T1.Location,T1.NPI_Number,T1.Provider
ORDER BY Loc_Acronym,Provider,SortOrder}