Tôi đang tạo truy vấn SQL có câu lệnh WHERE CASE WHEN
. Tôi đang làm điều gì đó sai và nhận được lỗi.WHERE CASE WHEN statement with Exists
câu lệnh SQL của tôi là như
DECLARE @AreaId INT = 2
DECLARE @Areas Table(AreaId int)
INSERT INTO @Areas SELECT AreaId
FROM AreaMaster
WHERE CityZoneId IN (SELECT CityZoneId FROM AreaMaster WHERE AreaId = @AreaID)
SELECT *
FROM dbo.CompanyMaster
WHERE AreaId IN
(CASE WHEN EXISTS (SELECT BusinessId
FROM dbo.AreaSubscription
WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId)
THEN @AreaId
ELSE (SELECT [@Areas].AreaId FROM @Areas)
END)
Tôi nhận được lỗi như
Msg 512, Level 16, State 1, Line 11
Subquery trở lại hơn 1 giá trị. Điều này không được phép khi truy vấn con theo sau =,! =, <, < =,>,> = hoặc khi truy vấn phụ được sử dụng dưới dạng biểu thức .
Vui lòng trợ giúp để chạy truy vấn thành công. Logic của tôi là kiểm tra điều kiện AreaId
trong (câu lệnh) cho mỗi hàng.
Tôi muốn chọn hàng chỉ khi
- công ty có nhập thuê bao vào
AreaSubscription
cho khu vực cụ thể thông qua@AreaId
- bảng
AreaSubscription
không có entry thuê bao sau đó đánh giáAreaId
trong(SELECT [@Areas].AreaId FROM @Areas)
'SELECT [@Areas] .AreaId FROM @ Areas' này có trả về nhiều giá trị không? – Nithesh
Có nó trả về danh sách các khu vực mà tôi đã tạo trước đó trong truy vấn. –
tôi nghĩ rằng ngoại lệ subquery là có. Điều gì về kết quả của '(SELECT BusinessId FROM dbo.AreaSubscription WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId)'? nhiều? – Nithesh