Sql server 2008 SQLServer2008中的减法
我有两个选择查询,如下所示:Sql server 2008 SQLServer2008中的减法,sql-server-2008,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 declare @a int declare @b int SELECT @a = COUNT(WARD_id) FROM IP_Admission WHERE
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
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
查询的输出是
2
6
现在我需要答案4。感谢您的帮助。您可以这样尝试:
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
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
您可以这样尝试:
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
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 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
由于您是从两个不同的表中提取这些值的,因此最好的方法是在ward 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的值。因为您从两个不同的表中提取这些值,所以最好的方法是将病房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
可以像这样使用内部联接。如果这不起作用,请告诉我
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;
谢谢大家,我解决了我的问题
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;
Msg 8120,级别16,状态1,第1行列“ward_master.Bed_Strength”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。如果您在查询中使用更多列,则需要按所有未使用聚合函数的列进行分组Msg 8120,级别16,状态1,第1行列“ward_master.Bed_Strength”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。如果在查询中使用更多列,则需要按所有未使用聚合函数的列进行分组,这就是我发布的答案。我的答案也是相同的。为了更好地理解,我已经详细阐述了。这是我发布的答案。我的答案也是一样的。为了更好地理解,我进行了详细阐述。