Mã nguồn

Script thực hành SQLServer bài 6: SUM, COUNT, IDENTITY, ROW_NUMBER, DISTINCT

Các lệnh T-SQL thực hành các hàm và câu lệnh thực hành Bài 6.
(Bôi đen câu lệnh muốn chạy, ấn F5)

-- 1. sum
select top 10* from tblHanghoa
 
select sum(hh_soton) as soton from tblHanghoa
 
--  2. avg
select avg(HH_GIANHAP) as gianhaptrungbinh from tblHanghoa
 
-- ==> tinh gia trij hang ton kho
-- ton * giatrungbinh
select sum(hh_soton) * avg(HH_GIANHAP) as tienhangtonkho from tblHanghoa
 
-- 3. count
select count(hh_id) from tblHanghoa
 
-- select * from tblNhomHanghoa
 
-- đếm số lượng nhóm hàng hóa được sử dụng trong bảng tblhanghoa
-- sử dụng DISTINCT 
select count(distinct hh_nhh_id) soluong from tblHanghoa
select distinct hh_nhh_id  from tblHanghoa
 
-- đếm số lượng hàng hóa trong 1 nhóm , dùng   group by 
select hh_nhh_id , count(hh_nhh_id) soluong from tblHanghoa group by hh_nhh_id
--- Lưu ý:  khi dùng sum, avg, count, nếu có các trường khác trong câu lệnh select  ===> các trường ko có hàm đi kèm ==> toàn bộ đặt sau group by (mỗi trường cách nhau bởi dấu phẩy)
 
select   (select nhh_ten from tblNhomHanghoa where nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
 from tblHanghoa group by hh_nhh_id
 
 -- 4. min => lấy giá trị nhỏ nhất, max: giá trị lớn nhất
 select   (select hh_ma from tblhanghoa where hh_giaban = ), min (hh_Giaban),  max(hh_Giaban) from tblHanghoa  
 
--  cần lấy các nhóm hàng hóa có số tồn từ < 2000 trở lên
select   (select nhh_ten from tblNhomHanghoa where nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
 from tblHanghoa  group by hh_nhh_id having sum(hh_soton) <2000
 
-- khồng dùng having, có thể dùng bảng tạm
 select * from (
select   (
select nhh_ten from tblNhomHanghoa where nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
from tblHanghoa  group by hh_nhh_id 
 ) t1 where tongsotoncuanhom<2000
 
-- 5. tạo trường tự tăng ở đầu ra
-- identity(int, 1,1)
-- cách 1:
 select ROW_NUMBER() OVER(ORDER BY tennhom ASC) AS   thutu, *   from (
select   (
select nhh_ten from tblNhomHanghoa where nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
from tblHanghoa  group by hh_nhh_id 
 ) t1 where tongsotoncuanhom<2000
  
-- cách 2: dùng 1 bảng tạm, bảng này có trường tự tăng ==> đưa dữ liệu vào bảng tạm -- lấy dữ liệu ra => có trường tự tăng
DECLARE @T TABLE (thutu int identity(1,1) , tennhom nvarchar(1000), soluong float, tongton float)
insert into @t(tennhom, soluong, tongton)
select tennhom, soluong, tongsotoncuanhom from (
select   (
select nhh_ten from tblNhomHanghoa where nhh_id = hh_nhh_id) tennhom
, count(hh_nhh_id) soluong
, sum(hh_soton) tongsotoncuanhom
from tblHanghoa  group by hh_nhh_id 
) t1 where tongsotoncuanhom<2000
select * from @t
------------------
-- case when then end
select top 20 hh_ma, hh_ten , HH_ACTIVE
, (case 
when HH_ACTIVE =1 then N'Còn sử dụng' 
when HH_ACTIVE =2 then N'Đang chờ nhập' 
else N'Không được sử dụng' 
end) active_ten
 from tblHanghoa  
 ---------------------