Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中交叉表查询以列显示月份_Sql_Sql Server 2008 - Fatal编程技术网

如何在SQL Server中交叉表查询以列显示月份

如何在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

因此,我想要的结果是保留当前列,但不是将月份全部放在一列中,而是将月份放在标题行中。如何在扩展的drop表中实现这一点。

只需在一个select查询中为每个月添加条件CASE/WHEN即可输出月份列。顺便说一下,你没有在那些月份专栏中提到你想要什么。下面我使用计数,但考虑任何其他聚集体。

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}