Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQLServer2008中的减法_Sql Server 2008 - Fatal编程技术网

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子句中。如果在查询中使用更多列,则需要按所有未使用聚合函数的列进行分组,这就是我发布的答案。我的答案也是相同的。为了更好地理解,我已经详细阐述了。这是我发布的答案。我的答案也是一样的。为了更好地理解,我进行了详细阐述。