Read-only archive. Login and posting are unavailable.

PDA

View Full Version : Bài toán SQL


better.chicken
24-10-2019, 13:29
Dear all,
mình đang nghiên cứu bên SQL server. Có vấn đề như thế này. Mình có bảng A và bảng B như hình. Muốn lấy kết quả ở bảng C nhưng đoạn code bên dưới không ra được kết quả mong muốn. Không biết như code bên dưới của mình cần sửa chổ nào để ra được kết quả ở bảng C anh em nhỉ.
Mình cám ơn nhiều
https://2.pik.vn/201981e7c937-cbb0-4f41-b0b0-d2e577fbf1a9.png
https://2.pik.vn/2019c6793948-228a-4158-93ae-1f4bd7353e92.png

quyendn84
24-10-2019, 13:34
Sao cai bang C bi du ra 2 row vay?

better.chicken
24-10-2019, 13:36
Sao cai bang C bi du ra 2 row vay?

Bảng C là tổng hợp của bảng A và B á bạn

adbn
24-10-2019, 13:41
Bạn nói kết quả không mong muốn là sao?
Thử:
SELECT A.namhoc, B.cap, A.lop, B.tongsohocsinh FROM bangA A LEFT JOIN bangB B ON A.namhoc = B.namhoc WHERE A.namhoc = '2019'

tanpro90
24-10-2019, 13:41
rồi sao biết lớp nào của cấp 2 , lớp nào của cấp 1 khi trong bảng a và b k có cột nào quy định

xGolemx
24-10-2019, 13:42
Select * from
(Select [Năm học], (CASE WHEN [Lớp] < 6 THEN 1 ELSE 2 END) as [Cấp], [Lớp], [Tổng số học sinh] from Bảng A
Union
Select [Năm học], [Cấp], [Lớp]='', [Tổng số học sinh] from Bảng B) as Bang C

tanpro90
24-10-2019, 13:44
SELECT A.namhoc, case when a.lop in (1,2,3,4) then 1 else 2 as 'CAP',a.lop, B.tongsohocsinh FROM bangA A LEFT JOIN bangB B ON A.namhoc = B.namhoc WHERE A.namhoc = '2019'

DaiSuThichAnMan
24-10-2019, 13:46
Không có case when làm sao nó ra cấp đc :bye:

Sent from Samsung SM-N960U using vozFApp (http://bit.ly/vozfapp)

quyendn84
24-10-2019, 13:50
thấy có vẻ hơn kỳ kỳ đấy, bạn tham khao xem, có thể mình hiểu sai ý :

sqlfiddle.com/#!18/0d601/1


SELECT
nam_hoc,
case when (lop < 6) then 1 else 2 END as cap,
lop,
tong_so
FROM
TableA
Where nam_hoc=2019

union all

SELECT
nam_hoc,
cap,
'' as lop,

tong_so
FROM
TableB
Where nam_hoc=2019

noodmiss
24-10-2019, 13:53
select
namhoc,
case when cap between 1 and 5 then 1
when cap between 6 and 9 then 2
end as cap,
lop,
tongsohocsinh
from
bangA

union all

select
namhoc,
cap,
null as lop,
tongsohocsinh
from
bangB

xGolemx
24-10-2019, 13:54
Mà đặt tên tiếng việt nhìn ghét thật chứ, sau này lỗi tùm lum cho xem :gach:

kissofdragon1211
24-10-2019, 13:54
Sai từ cách ra đầu bài. Bảng A phải có 1 cột chứa thông tin cấp. Hoặc có 1 bảng map giữa cấp và lớp.
Nghiên cứu mà gặp cái bài tù như này thì sao có kết quả được @@.

Ps Tui đang làm sql developer. Ai thích làm cái này ko?

ngddan
24-10-2019, 14:06
Sai từ cách ra đầu bài. Bảng A phải có 1 cột chứa thông tin cấp. Hoặc có 1 bảng map giữa cấp và lớp.
Nghiên cứu mà gặp cái bài tù như này thì sao có kết quả được @@.

Ps Tui đang làm sql developer. Ai thích làm cái này ko?

Ý thím là cái này :chaymau:

https://2.pik.vn/2019136ba8c5-afba-421f-86f9-7ee08c518878.png

kissofdragon1211
24-10-2019, 14:09
Ý thím là cái này :chaymau:

https://2.pik.vn/2019136ba8c5-afba-421f-86f9-7ee08c518878.png

Đúng rồi tôi dùng công cụ SQL Developer và role của tôi cũng là như thế luôn. Nhiều khi thấy công việc nó EZ 1 cách khá là nhàm :sosad:

xuantruongT109
24-10-2019, 14:10
Table thì không có khóa chính, yêu cầu thì cũng méo rõ. Chả hiểu thớt đang muốn làm gì. Nếu chỉ cần lấy như table C thím nói thì cần gì bảng B, bảng A có lớp, năm và tổng học sinh rồi case when là ra cấp thôi.