我有兩個選擇查詢是這樣的:在查詢的減法在SQL Server 2008
SELECT COUNT(WARD_id)
FROM IP_Admission
WHERE (Status = 'V' OR Status = 'D') AND WARD_ID = 1
SELECT BED_STRENGTH
FROM Ward_Master
WHERE Ward_ID = 1
輸出是
2
6
現在我需要回答。任何幫助讚賞。
我有兩個選擇查詢是這樣的:在查詢的減法在SQL Server 2008
SELECT COUNT(WARD_id)
FROM IP_Admission
WHERE (Status = 'V' OR Status = 'D') AND WARD_ID = 1
SELECT BED_STRENGTH
FROM Ward_Master
WHERE Ward_ID = 1
輸出是
2
6
現在我需要回答。任何幫助讚賞。
select count(i.ward_id) - w.bed_strength as Diff from
ip_admission i join ward_master w on w.ward_id=i.ward_id
where (status='V' or status='D') and i.ward_id=1
group by w.bed_strength
你可以嘗試這樣的:
declare @a int
declare @b int
SELECT @a = COUNT(WARD_id) FROM IP_Admission WHERE (Status='V' OR Status='D') AND WARD_ID=1
SELECT @b = BED_STRENGTH FROM Ward_Master WHERE Ward_ID=1
select @b - @a
嘗試一下本作的所有病房ID的
SELECT M.Ward_ID,BED_STRENGTH -COUNT(WARD_id)
FROM IP_Admission A
JOIN Ward_Master M ON A.WARD_ID = M.WARD_ID
WHERE (A.Status='V' OR A.Status='D')
GROUP BY M.Ward_ID
因爲你是從兩個不同的表,要做到這一點的最好辦法拔出這些值將會加入病房ID表。
SELECT wm.BED_STRENGTH - COUNT(ip.WARD_id)
FROM Ward_Master wm inner join IP_Admission ip
On wm.ward_id = ip.ward_id
WHERE (ip.Status='V' OR ip.Status='D')
Group by wm.BED_STRENGTH
這應該有效,但它可能不取決於模式。這種方法的優點是它可以找到所有病房ID的值。
最簡單的解決方法是:
SELECT (subquery1) - (subquery2)
這將只顯示您指定的病房ID值。
您可以像這樣使用內連接。請讓我知道如果這不起作用。
create table #Tmp1
(
Ward_Id INT,
Status Char(1)
)
create table #tmp2
(
Ward_Id INT,
BED_STRENGTH INT
)
INSERT INTO #Tmp1 VALUES (1,'V'),(1,'D')
INSERT INTO #tmp2 VALUES (1,6)
SELECT COUNT(WARD_id)
FROM #Tmp1
WHERE (Status='V' OR Status='D') AND WARD_ID=1
SELECT BED_STRENGTH FROM #Tmp2 WHERE Ward_ID=1
SELECT #tmp2.BED_STRENGTH - COUNT(#tmp1.WARD_id)
FROM #Tmp1
INNER JOIN #tmp2 ON #tmp2.Ward_Id = #tmp1.Ward_Id
WHERE (Status='V' OR Status='D') AND #tmp1.WARD_ID=1
GROUP BY #tmp2.BED_STRENGTH
DROP TABLE #Tmp1
DROP TABLE #Tmp2
謝謝大家我解決我的查詢作爲
SELECT M.Bed_Strength - COUNT(A.WARD_id) as diff
FROM IP_Admission A
JOIN Ward_Master M ON A.WARD_ID = M.WARD_ID
WHERE (A.Status='V' OR A.Status='D') and M.Ward_ID=1 group by M.Bed_Strength;
的所有列進行分組,這就是我發佈的答案。 –
我的回答也是一樣的。爲了更好的理解,我詳細闡述了這一點。 –
消息8120,級別16,狀態1,行1列 因爲它不包含在「ward_master.Bed_Strength」在選擇列表中無效集合函數或GROUP BY子句。 –
對不起,當使用聚合函數時必須在group by子句中使用.. –
如果在查詢中使用更多列,則需要按未聚合函數 –