AnNguyen > 25-11-21, 05:43 PM
ongke0711 > 25-11-21, 07:42 PM
AnNguyen > 26-11-21, 09:00 AM
ongke0711 > 27-11-21, 10:13 PM
(26-11-21, 09:00 AM)AnNguyen Đã viết: Vâng anh. Nó vẫn là trả về như bình thường anh ạ.
Chỉ đơn giản nếu em bỏ câu lệnh insert bên trên đi thì vẫn hoạt động còn nếu cho hàm insert vào thì lỗi.
Anh có thể thử để biết ạ.
AnNguyen > 29-11-21, 06:07 PM
(27-11-21, 10:13 PM)ongke0711 Đã viết:Em cảm ơn anh.(26-11-21, 09:00 AM)AnNguyen Đã viết: Vâng anh. Nó vẫn là trả về như bình thường anh ạ.
Chỉ đơn giản nếu em bỏ câu lệnh insert bên trên đi thì vẫn hoạt động còn nếu cho hàm insert vào thì lỗi.
Anh có thể thử để biết ạ.
Do đối với cái SP này thì resultSet (Query) trả về không còn là Recordset nữa mà chỉ là returnValue của Insert. Trên SQL Server có thể chạy và hiển thị table do nó chạy lệnh tuần tự nhưng qua ADO Command thì không phải như vậy.
Thực tế thì tôi chưa thấy SP thực hiện các Action query rồi kết hợp Select table như vậy. Thường tôi thiết kế sau khi insert sẽ trả về cái ID của dòng vừa Insert để phục vụ cho các tác vụ kế tiếp. Viết một SP khác để lấy Recordset từ cái ID vừa trả về. Khi đó các SP này sẽ phục vụ chung cho nhiều tác vụ hơn, linh động hơn.
ongke0711 > 29-11-21, 06:16 PM
AnNguyen > 30-11-21, 09:32 AM
(29-11-21, 06:16 PM)ongke0711 Đã viết: Bạn post cái SP đó lên xem thử.Đây anh ạ.
Việc sử dụng thêm biến Table tạm nó sẽ làm nặng nề thêm khi chạy.
DECLARE @MyList TABLE (NgayCong date, MaNhanVien varchar(7), ThoiLuong decimal(3,1))
INSERT INTO @MyList
select NgayChamCong , maNhanVien, IIF(cc.ThoiLuong<soGioLamViec, IIF( cc.ThoiLuong> (soGioLamViec/2), (soGioLamViec/2),0 ), ThoiLuong) as [SoCongLamViec]
, SoCongNghiHuongLuong, MaHuongLuong
from (
select cc.NgayChamCong , cc.maNhanVien , clv.soGioLamViec
, FLOOR(IIF(cc.GioVao>=clv.GioKetThucGiuaCa,0, DATEDIFF(MINUTE,IIF(cc.GioVao<clv.GioVao, clv.GioVao,cc.GioVao), IIF(cc.gioRa>clv.GioKetThucGiuaCa,GioKetThucGiuaCa,cc.gioRa) ) )/60.0*2)/2 +
FLOOR(IIF(cc.GioRa<=clv.GioBatDauGiuaCa,0, DATEDIFF(MINUTE, IIF(cc.GioVao<clv.GioBatDauGiuaCa,clv.GioBatDauGiuaCa,cc.GioVao) ,IIF(cc.giora>clv.giora, clv.giora,cc.giora)) )/60.0*2 )/2 [ThoiLuong]
,concat( (DATEDIFF(MINUTE,cc.GioVao, cc.GIoRa) )/60 ,':', (((DATEDIFF(s,cc.GioVao, cc.GIoRa) )/60) )%60 ) as [ThoiGian]
from tbCheckInOut cc
inner join tbDanhMucCaLamViec clv on clv.MaCaLamViec= cc.CaLamViec
inner join tbdanhmuc_NgayTrongTuan ntt on ntt.ID=DATEPART(dw,cc.NgayChamCong)
WHERE FORMAT(cc.NgayChamCong,'yyyyMM')='202101'
) cc
Select * from @MyList
PIVOT
(
sum ([SoCongLamViec] )
FOR MaHuongLuong IN
( [CT], [TN],[TV]) -- đếm số công hưởng lương: Chính thức, Tập nghề, Thử việc
) AS luong
Left join (select sum(SoCongLamViec), sum(SoCongNghiHuongLuong) from @MyList) l on l.maNhanVien=cc.MaNhanVien
hieuvn > 30-11-21, 10:19 AM
(30-11-21, 09:32 AM)AnNguyen Đã viết: Đây anh ạ.
Kiểu dạng dạng như này để em có thể dùng nó tính đi tính lại nhiều thứ mà không phải viết lại nhiều lần. Nếu biến Table mà nặng vậy thì em tìm cách khác vậy.
Mã:DECLARE @MyList TABLE (NgayCong date, MaNhanVien varchar(7), ThoiLuong decimal(3,1))
INSERT INTO @MyList
select NgayChamCong , maNhanVien, IIF(cc.ThoiLuong<soGioLamViec, IIF( cc.ThoiLuong> (soGioLamViec/2), (soGioLamViec/2),0 ), ThoiLuong) as [SoCongLamViec]
, SoCongNghiHuongLuong, MaHuongLuong
from (
select cc.NgayChamCong , cc.maNhanVien , clv.soGioLamViec
, FLOOR(IIF(cc.GioVao>=clv.GioKetThucGiuaCa,0, DATEDIFF(MINUTE,IIF(cc.GioVao<clv.GioVao, clv.GioVao,cc.GioVao), IIF(cc.gioRa>clv.GioKetThucGiuaCa,GioKetThucGiuaCa,cc.gioRa) ) )/60.0*2)/2 +
FLOOR(IIF(cc.GioRa<=clv.GioBatDauGiuaCa,0, DATEDIFF(MINUTE, IIF(cc.GioVao<clv.GioBatDauGiuaCa,clv.GioBatDauGiuaCa,cc.GioVao) ,IIF(cc.giora>clv.giora, clv.giora,cc.giora)) )/60.0*2 )/2 [ThoiLuong]
,concat( (DATEDIFF(MINUTE,cc.GioVao, cc.GIoRa) )/60 ,':', (((DATEDIFF(s,cc.GioVao, cc.GIoRa) )/60) )%60 ) as [ThoiGian]
from tbCheckInOut cc
inner join tbDanhMucCaLamViec clv on clv.MaCaLamViec= cc.CaLamViec
inner join tbdanhmuc_NgayTrongTuan ntt on ntt.ID=DATEPART(dw,cc.NgayChamCong)
WHERE FORMAT(cc.NgayChamCong,'yyyyMM')='202101'
) cc
Select * from @MyList
PIVOT
(
sum ([SoCongLamViec] )
FOR MaHuongLuong IN
( [CT], [TN],[TV]) -- đếm số công hưởng lương: Chính thức, Tập nghề, Thử việc
) AS luong
Left join (select sum(SoCongLamViec), sum(SoCongNghiHuongLuong) from @MyList) l on l.maNhanVien=cc.MaNhanVien
mrsiro > 30-11-21, 08:24 PM