簡體   English   中英

計算一個財政年度的產品采購| 數據庫服務器

[英]Calculating product purchases in a Financial Year | SQL Server

我想了解 2 個財政年度( FY16-17 和 FY17-18 )的產品購買情況。

去做吧:

  1. OwnerID: 101 ,第一次購買是在2014年,FY17-18有3次購買。

  2. OwnerID: 102 ,第一次購買是在2011年,16-17財年購買1次,17-18財年購買1次。

  3. OwnerID: 103 ,第一次購買是在 2017 年但是不應該被認為是因為他是一個新客戶,在 FY17-18 只購買了一次。 (即新客戶不考慮首次購買

  4. OwnerID: 104 ,第一次購買是在 2016 年,但在 16-17 財年又購買了 3 次。

代碼:

CREATE TABLE Test
(
        OwnerID INT,
        ProductID VARCHAR(255),
        PurchaseDate DATE 
);

INSERT INTO Test (OwnerID, ProductID, PurchaseDate)
VALUES (101, 'P2', '2014-04-03'), (101, 'P9', '2017-08-09'),
       (101, 'P11', '2017-10-05'), (101, 'P12', '2018-01-15'),
       (102, 'P1', '2011-06-02'), (102, 'P3', '2016-06-03'),
       (102, 'P10', '2017-09-01'),
       (103, 'P8', '2017-06-23'),
       (104, 'P4', '2016-12-17'), (104, 'P5', '2016-12-18'),
       (104, 'P6', '2016-12-19'), (104, 'P7', '2016-12-20');

期望的輸出:

FY16-17   FY17-18
-----------------
   5         4

我嘗試了以下查詢來獲取不是第一次出現的記錄,並通過獲取財政年度內的計數:

SELECT * 
FROM 
    (SELECT 
         ROW_NUMBER() OVER(PARTITION BY OwnerID ORDER BY PurchaseDate) AS OCCURANCE
     FROM Test
     GROUP BY OwnerID, PurchaseDate)
WHERE 
    OCCURANCE <>  1 

但是它拋出一個錯誤:

消息 102,級別 15,狀態 1,第 5 行
')' 附近的語法不正確。

子查詢需要有一個別名- 試試這個:

SELECT * 
FROM 
    (SELECT 
         ROW_NUMBER() OVER(PARTITION BY OwnerID ORDER BY PurchaseDate) AS OCCURRENCE
     FROM Test
     GROUP BY OwnerID, PurchaseDate) subQry
WHERE 
    subQry.OCCURRENCE <>  1 

我正在使用 IIF 來分隔兩個會計年度和子查詢來過濾掉那些只有一次購買的

SELECT SUM(IIF(PurchaseDate >= '2016-04-01' AND PurchaseDate < '2017-04-01',1,0)) AS 'FY16-17',
       SUM(IIF(PurchaseDate >= '2017-04-01' AND PurchaseDate < '2018-04-01',1,0)) AS 'FY17-18'
FROM test t1
JOIN (SELECT ownerID, COUNT(*) count 
      FROM test 
      GROUP BY ownerID) t2 on t1.ownerID = t2.ownerID
WHERE t2.count > 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM