Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

GROUP BY trong MS SQL

15:47 06-06-2017 840 lượt xem 6 bình luận 17:48 06-06-2017

Chào mọi người, em có 1 table CUONSACH như sau:

CREATE TABLE CUONSACH
(
	MASACH INT PRIMARY KEY,
	NGAYNHAP DATETIME DEFAULT GETDATE(),
	TINHTRANG INT, 
	VITRI INT,
	MAGAYSACH INT FOREIGN KEY REFERENCES GAYSACH(MAGAYSACH) ON DELETE CASCADE ON UPDATE CASCADE
)

và có dữ liệu mẫu sau:

INSERT CUONSACH VALUES ( 90,'22/8/2010',1,1,1);
INSERT CUONSACH VALUES ( 91,'22/8/2011',1,1,1);
INSERT CUONSACH VALUES ( 92,'22/8/2012',1,1,1);
INSERT CUONSACH VALUES ( 93,'22/8/2015',1,1,1);
INSERT CUONSACH VALUES ( 94,'22/8/2010',1,1,1);
INSERT CUONSACH VALUES ( 95,'22/8/2011',1,1,1);
INSERT CUONSACH VALUES ( 96,'22/8/2012',1,1,1);
INSERT CUONSACH VALUES ( 97,'22/8/2015',1,1,1);

Điều em muốn là SELECT để tìm ra tổng sách tính từ thời điểm bắt đầu nhập đến thời điểm năm đó(theo từng năm). Em đã cố gắng Group By:

SELECT YEAR(NGAYNHAP), COUNT(CUONSACH.MASACH)
FROM CUONSACH, GAYSACH
WHERE CUONSACH.MAGAYSACH =GAYSACH.MAGAYSACH AND YEAR(NGAYNHAP)<= YEAR(CAST(CURRENT_TIMESTAMP AS DATE))
GROUP BY YEAR(NGAYNHAP)

nhưng kết quả đạt được là lượng sách được nhập theo từng năm.

2010	2
2011	2
2012	2
2015	2

Nhưng kết quả mà em muốn là tìm ra tổng sách tính từ thời điểm bắt đầu nhập đến thời điểm năm đó(theo từng năm):

2010   2
2011   4
2012   6
2015   8

Nhờ mọi người giúp đỡ, em cảm ơn nhiều ạ!

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
DG SuperAdmin, Author, KquizAdmin, KquizAuthor đã bình luận 16:55 06-06-2017

Câu truy vấn trên đúng rồi mà bạn, dữ liệu mẫu đang là 8 row, và mỗi năm 2 row. Nên kết quả ra z là đúng rồi còn j.

Cập nhật đáp án:

SELECT YEAR(s.NGAYNHAP), (	SELECT COUNT(s2.MASACH)
							FROM dbo.CUONSACH s2
							WHERE YEAR(s2.NGAYNHAP) <= YEAR(s.NGAYNHAP))
FROM CUONSACH s, GAYSACH
WHERE s.MAGAYSACH = GAYSACH.MAGAYSACH AND YEAR(s.NGAYNHAP)<= YEAR(CAST(CURRENT_TIMESTAMP AS DATE))
GROUP BY YEAR(s.NGAYNHAP)

 

Viet Anh đã bình luận 17:15 06-06-2017

Khi bạn đã GROUP BY theo năm như vậy thì nó chỉ xét trong năm đó thôi chứ có xét được ra năm ngoài đâu :) Bạn nên dùng cách khác để viết câu truy vấn cho mục đích đó ! Mình nghĩ nên dùng con trỏ :D Chúc bạn làm lại may mắn :))

Câu hỏi mới nhất