2014-02-24 79 views
1

我有兩個選擇查詢是這樣的:在查詢的減法在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 

現在我需要回答。任何幫助讚賞。

回答

1
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 
+0

消息8120,級別16,狀態1,行1列 因爲它不包含在「ward_master.Bed_Strength」在選擇列表中無效集合函數或GROUP BY子句。 –

+0

對不起,當使用聚合函數時必須在group by子句中使用.. –

+0

如果在查詢中使用更多列,則需要按未聚合函數 –

2

你可以嘗試這樣的:

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 
1

嘗試一下本作的所有病房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 
1

因爲你是從兩個不同的表,要做到這一點的最好辦法拔出這些值將會加入病房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值。

1

您可以像這樣使用內連接。請讓我知道如果這不起作用。

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 
0

謝謝大家我解決我的查詢作爲

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; 
+2

的所有列進行分組,這就是我發佈的答案。 –

+0

我的回答也是一樣的。爲了更好的理解,我詳細闡述了這一點。 –