30/09/2018, 23:51

Làm sao để lấy được giá trị của 2 năm nay và trước trong sql

Chào mọi người,
Em đang muốn chuyển nguyên đoạn này về thành một câu select

DECLARE @CURRER DECIMAL, @PREVER DECIMAL
SET @CURRER = (SELECT ISNULL(SUM(ExpectedRevenue),0) FROM dbo.CAMPAIGNS
WHERE YEAR(CrtdDate) = 2015 AND MONTH(CrtdDate) = 11)
SET @PREVER = (SELECT ISNULL(SUM(ExpectedRevenue),0) FROM dbo.CAMPAIGNS
WHERE YEAR(CrtdDate) = 2016 AND MONTH(CrtdDate) = 11)

SELECT 11 AS MONTHS, @CURRER ,@PREVER

Và đây là đoạn em chuyển về thành 1 câu select

SELECT 11 AS MONTHS, ISNULL(SUM(A.ExpectedRevenue),0) AS CURRER,ISNULL(SUM(B.ExpectedRevenue),0 )AS PREVER
FROM dbo.CAMPAIGNS A , dbo.CAMPAIGNS B
WHERE YEAR(A.CrtdDate) = 2015 AND MONTH(A.CrtdDate) = 11 AND YEAR(B.CrtdDate) = 2016

Sở dĩ em muốn chuyển thành một câu như vậy là để em union all cho 12 tháng ạ

Mọi người giúp em với, em sai ở chỗ nào ạ ?

Mai Anh Dũng viết 02:05 ngày 01/10/2018

bảng dữ liệu được thiết kế thế nào?

Gửi lên tên bảng và các thuộc tính nữa.

Đẵng Nguyễn Quốc viết 01:52 ngày 01/10/2018

Dạ, đây là table dữ liệu và thuộc tính ạ. Anh giúp em với! Không biết cú pháp có sai ở chỗ nào ko nữa mà nó lại ra kết quả khác nhau ạ

Đẵng Nguyễn Quốc viết 02:03 ngày 01/10/2018

Anh @ltd em làm được rồi ạ !

SELECT 11 AS MONTHS,SUM(CASE WHEN (YEAR(CrtdDate) = 2016 - 1) AND (MONTH(CrtdDate) = 11) THEN ExpectedRevenue ELSE 0 END) AS CURRER,
SUM(CASE WHEN (YEAR(CrtdDate) = 2016) AND (MONTH(CrtdDate) = 11) THEN ExpectedRevenue ELSE 0 END) AS PREVER
FROM dbo.CAMPAIGNS

Đây là thành quả ạ

Bài liên quan
0