首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server DATEPART

SQL Server DATEPART
EN

Stack Overflow用户
提问于 2015-12-11 03:14:22
回答 4查看 176关注 0票数 0

我正在使用AdventureWorks2012示例数据库。

我正试图使用datepart函数计算2006年的季度总交易额。我需要SEASON列返回1,2,3,4 (而不仅仅是3,4 ),TOTAL列返回值

代码语言:javascript
复制
0, 0, 83537.4000000, 134826.4400000

很抱歉,如果这让人费解的话,这是我第一次使用堆栈溢出。请帮帮我!

以下是代码:

代码语言:javascript
复制
WITH GROSSINCOME AS
(
    SELECT 
        A.ORDERID, 
        SUM((B.QTY * B.unitprice * (1 - B.DISCOUNT))) + A.FREIGHT AS    TOTAL,
        A.orderdate
    FROM 
        SALES.Orders AS A 
    JOIN 
        SALES.OrderDetails AS B ON A.orderid = B.orderid
    GROUP BY 
        A.orderid, A.freight, A.orderdate
)
SELECT 
    DATEPART(QUARTER, orderdate) AS SEASON,
    SUM(TOTAL) AS TOTAL
FROM  
    GROSSINCOME 
WHERE 
    YEAR(orderdate) = '2006'
GROUP BY 
    DATEPART(QUARTER,orderdate);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-11 03:56:14

只是为了修复黑暗代码,下面的代码应该可以工作。

代码语言:javascript
复制
WITH GROSSINCOME AS
(
SELECT A.ORDERID,SUM(B.QTY*B.unitprice*(1-B.DISCOUNT)) + A.FREIGHT AS TOTAL,
A.orderdate
FROM SALES.Orders AS A JOIN SALES.OrderDetails AS B
ON A.orderid=B.orderid
WHERE YEAR(A.orderdate)='2006'
GROUP BY A.orderid,A.freight,A.orderdate
)

SELECT T.VAL AS SEASON,
SUM(ISNULL(TOTAL,0)) AS TOTAL
FROM GROSSINCOME
        RIGHT JOIN (VALUES(1),(2),(3),(4))as T(VAL) ON T.VAL =  DATEPART(QUARTER,orderdate)
GROUP BY T.VAL;
票数 0
EN

Stack Overflow用户

发布于 2015-12-11 03:23:15

尝尝这个

代码语言:javascript
复制
WITH GROSSINCOME AS
(
SELECT A.ORDERID, SUM((B.QTY*B.unitprice*(1-B.DISCOUNT))) + A.FREIGHT AS TOTAL,
A.orderdate
FROM SALES.Orders AS A JOIN SALES.OrderDetails AS B
ON A.orderid=B.orderid
GROUP BY A.orderid,A.freight,A.orderdate
)

SELECT T.VAL AS SEASON,
SUM(TOTAL) AS TOTAL
FROM GROSSINCOME
        RIGHT JOIN (VALUES(1),(2),(3),(4))as T(VAL) ON T.VAL =  DATEPART(QUARTER,orderdate)
WHERE YEAR(orderdate)='2006'
GROUP BY T.VAL;
票数 1
EN

Stack Overflow用户

发布于 2015-12-11 06:21:47

检查刚才修改的查询,它将返回4行,四季从1,2,3,4和它们的总数

代码语言:javascript
复制
;WITH GROSSINCOME AS
(
    SELECT 
        A.ORDERID,SUM((B.QTY*B.unitprice*(1-B.DISCOUNT))) + A.FREIGHT AS TOTAL,
        A.orderdate,DATEPART(QUARTER,orderdate) AS season,YEAR(orderdate) orderyear
    FROM 
        SALES.Orders AS A JOIN SALES.OrderDetails AS B
    ON A.orderid=B.orderid
    GROUP BY A.orderid,A.freight,A.orderdate
)
SELECT 
    season,SUM(TOTAL) AS TOTAL
FROM GROSSINCOME 
WHERE orderyear=2006
GROUP BY season;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34215517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档