Dùng Case hay IIF với SQL trong MS Query ?

Liên hệ QC

alohn

Thành viên chính thức
Tham gia
21/12/07
Bài viết
59
Được thích
13
Mình có truy vấn CSDL trên SQL qua MS query trong Excel.

SELECT AccountingObject.AccountingObjectName, GeneralLedger.AccountNumber, GeneralLedger.DebitAmount, GeneralLedger.CreditAmount, GeneralLedger.RefDate, Case GeneralLedger.RefDate When '2010-06-01' Then GeneralLedger.DebitAmount Else 0 End
FROM BANK.dbo.AccountingObject AccountingObject, BANK.dbo.GeneralLedger GeneralLedger
WHERE AccountingObject.AccountingObjectID = GeneralLedger.AccountingObjectID
ORDER BY GeneralLedger.RefDate, AccountingObject.AccountingObjectName

Nếu dùng câu lệnh Case như trên thì sẽ tạo ra cột lấy dữ liệu DebitAmount có RefDate bằng ngày 2010-06-01, nhưng nếu mình thanh đổi thành

Case GeneralLedger.RefDate When < '2010-06-01' Then GeneralLedger.DebitAmount Else 0 End

Thì báo lỗi

SQL Query can't be represented graphically. Continue anyway?

Didn't expect 'When' after the Select column list

Nhờ các bạn chỉ giúp xem mình đang bĩ lỗi ở đoạn nào. Nếu muốn lấy theo điều kiện thì dùng câu lệnh iif với SQL trong MS query có được không ?
Với dữ liệu lấy theo khoảng thời gian, thì dùng câu lệnh Select case, hay dùng iif.

Thank cả nhà nhiều
 
bạn cung cấp các thông tin sau:
-Hệ cơ sở dữ liệu bạn đang dùng
-Ngôn ngữ lập trình (không phải ngôn ngữ truy vấn nhá)
-Cấu trúc bảng (table)
- mục đích của bạn là gì : lấy dữ liệu gì và với điều kiện nào
-- --- ---
Xong anh chị trên diễn đàn sẽ hỗ trợ bạn
 
Hệ CSDL là SQL, cấu trúc bảng gồm hai bảng là bảng Nhật ký chung, và Bảng danh sách khách hàng. RefDate là ngày chứng từ, DebitAmount là số tiền bên Nợ, CreditAmount là số tiền bên có, mình đang muốn kết hợp làm một bảng công nợ khách hàng Case GeneralLedger.RefDate When <'2010-06-01' Then GeneralLedger.DebitAmount Else 0 End câu lệnh này là để lấy số tiền bên nợ có điều kiện thỏa mãn là nhỏ hơn ngày '2010-06-01'. Mình muốn hỏi là dùng câu lệnh Case có làm được điều này không, hoặc câu lệnh iif. Hay bắt buộc phải lấy điều kiện sau mệnh đề where.
 
Hệ CSDL là SQL, cấu trúc bảng gồm hai bảng là bảng Nhật ký chung, và Bảng danh sách khách hàng. RefDate là ngày chứng từ, DebitAmount là số tiền bên Nợ, CreditAmount là số tiền bên có, mình đang muốn kết hợp làm một bảng công nợ khách hàng Case GeneralLedger.RefDate When <'2010-06-01' Then GeneralLedger.DebitAmount Else 0 End câu lệnh này là để lấy số tiền bên nợ có điều kiện thỏa mãn là nhỏ hơn ngày '2010-06-01'. Mình muốn hỏi là dùng câu lệnh Case có làm được điều này không, hoặc câu lệnh iif. Hay bắt buộc phải lấy điều kiện sau mệnh đề where.
dùng thử hem, không thì bỏ dấu # đi, không nữa thì gửi dữ liệu lên, mình đón là sai kiểu dữ liệu so sánh thôi
PHP:
CONVERT(VARCHAR,GeneralLedger.RefDate,103)  < '#01/06/20101#' (hoặc 'mm/dd/yyyy'='06/01/2010')
 
Lần chỉnh sửa cuối:
Hình như Where chứ không phải When. Mình đoán thôi vì không biết xài ngôn ngữ bạn đang dùng.
Còn IIf có xài được hay không thì sao bạn không thử?
 
Hình như Where chứ không phải When. Mình đoán thôi vì không biết xài ngôn ngữ bạn đang dùng.
Còn IIf có xài được hay không thì sao bạn không thử?

Case ... ELSE trong SQL là bình thường mà anh.
Thực ra dùng cấu trúc này để viết cho các trường hợp phức tạp hơn giống Select... Case trong các ngôn ngữ khác. Còn yêu cầu của bạn thì dùng điều kiện bình thường của SQL là OK rồi
Chỉ khó là dạng datetime trong MS SQL.
 
Web KT
Back
Top Bottom