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

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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.

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

CONVERT(VARCHAR,GeneralLedger.RefDate,103) < '#01/06/20101#' (hoặc 'mm/dd/yyyy'='06/01/2010')

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.

www.giaiphapexcel.com/diendan/threads/d%C3%B9ng-case-hay-iif-v%E1%BB%9Bi-sql-trong-ms-query.50472/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm