【问题标题】:How can I pivot data based on Month and year wise client Report如何根据月和年明智的客户报告透视数据
【发布时间】:2018-09-01 06:55:31
【问题描述】:

我正在尝试根据每年的月份检索数据。它会得到,但排序不正确。

选择客户、发货日期、型号、型号1、型号2、型号3 从 ( 选择客户 ,Concat(year(Audit_Date),' ',datename(month,Audit_Date)) as DispatchDate ,楷模 ,Count(Models) '单位' FROM dbo.ABC GROUP BY Client,Concat(year(Audit_Date),' ',datename(month,Audit_Date)),Models ) A B C D PIVOT(SUM(Units) FOR Models IN (Model1,Model2,Model3)) as P ORDER BY Client,DispatchDate

我会得到这样的结果集:

客户调度日期 Model1 Model2 Model3 客户 1 2017 年 12 月 0 0 0 客户 1 2017 年 11 月 25 日 0 0 客户 1 2018 年 1 月 21 日 0 0 客户 1 2018 年 3 月 9 0 0 客户 2 2017 年 12 月 8 日 0 0 客户 2 2018 年 4 月 5 0 0 客户 2 2018 年 8 月 0 0 0 客户 2 2018 年 7 月 0 0 0 客户 2 2018 年 3 月 0 0 0 客户 3 2017 年 12 月 4 0 0 客户 3 2017 年 11 月 687 0 0 客户 3 2018 年 4 月 8 0 0 客户 3 2018 年 1 月 0 0 0

但需要的数据如:

客户调度日期 Model1 Model2 Model3 客户 1 2018 年 1 月 21 日 0 0 客户 1 2018 年 3 月 9 0 0 客户 1 2017 年 11 月 25 日 0 0 客户 1 2017 年 12 月 0 0 0 客户 2 2018 年 3 月 0 0 0 客户 2 2018 年 4 月 5 0 0 客户 2 2018 年 7 月 0 0 0 客户 2 2018 年 8 月 0 0 0 客户 2 2017 年 12 月 8 日 0 0 客户 3 2018 年 1 月 0 0 0 客户 3 2018 年 4 月 8 0 0 客户 3 2017 年 11 月 687 0 0 客户 3 2017 年 12 月 4 0 0

请任何人建议我进行查询。

【问题讨论】:

  • 试试:ORDER BY Client, DispatchDate DESC
  • 是的,您可以使用 ORDER BY Client, DispatchDate DESC 获得此结果
  • 月不使用 ORDER BY Client, DispatchDate DESC 订购
  • 您发布的当前结果与查询不匹配。在结果中,您将DispatchDate 显示为2017 December。但是,如果根据您发布的查询,它应该是 2017 12 。请相应地更新您的问题
  • 抱歉,我忘记了要放置的功能。现在你可以试试@Squirrel

标签: sql-server


【解决方案1】:

据我了解,

SELECT Client,DispacthDate,Models,Model1,Model2,Model3
FROM  (
        SELECT  Client
                ,Concat(year(Audit_Date),' ',datename(month,Audit_Date)) as DispatchDate
                ,Models
                ,Count(Models) 'Units'
        FROM dbo.ABC
        GROUP BY Client,Concat(year(Audit_Date),' ',datename(month,Audit_Date)),Models
      ) abcd
PIVOT(SUM(Units) FOR Models IN (Model1,Model2,Model3)) as P
ORDER BY Client,
, DATEPART (YYYY, convert(date, DispacthDate)) desc  -- here query has been changed.
, DATEPART (MM, convert(date, DispacthDate))  -- here query has been changed.

【讨论】:

    【解决方案2】:

    不要在内部查询中将 DispatchDate 转换为字符串。将其保存为日期或日期时间类型。然后在外部查询中进行转换

    SELECT Client,
           DATENAME(YEAR, Audit_Date) + ' ' + DATENAME(MONTH, Audit_Date) AS DispatchDate,  
           Models, Model1, Model2, Model3
    FROM  (
            SELECT  Client
                    ,DATEADD(MONTH, DATEDIFF(MONTH, 0, Audit_Date), 0) as Audit_Date
                    ,Models
                    ,Count(Models) AS Units
            FROM    dbo.ABC
            GROUP BY Client, 
                     DATEADD(MONTH, DATEDIFF(MONTH, 0, Audit_Date), 0), month(Audit_Date)),
                     Models
          ) abcd
    PIVOT(SUM(Units) FOR Models IN (Model1,Model2,Model3)) as P
    ORDER BY Client, Audit_Date
    

    【讨论】:

    • 通过这个查询,我无法获得按月分组
    • 是的。这是DATEADD(MONTH, DATEDIFF(MONTH, 0, Audit_Date), 0) 会给你一个月的第一天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2014-11-22
    • 1970-01-01
    • 2015-09-16
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多