Sql server 连接SQL Server 2005中2条select count语句的语法
我有两个针对同一个表的COUNT查询,它们是另一个select查询中的子查询。 我想做的是这样的:Sql server 连接SQL Server 2005中2条select count语句的语法,sql-server,Sql Server,我有两个针对同一个表的COUNT查询,它们是另一个select查询中的子查询。 我想做的是这样的: SELECT Stuff , ((SELECT CAST(COUNT(*) from cTable WHERE Water = 'wet')) AS VARCHAR) +'/'+ ((SELECT CAST(COUNT(*) from cTable WHERE sky = 'blue')) AS VARCHAR) AS StockCount FROM aTable W
SELECT
Stuff ,
((SELECT CAST(COUNT(*) from cTable WHERE Water = 'wet')) AS VARCHAR) +'/'+
((SELECT CAST(COUNT(*) from cTable WHERE sky = 'blue')) AS VARCHAR) AS StockCount
FROM aTable
WHERE MyData = 'Rocks'
并为aTable中的每个内容输出大约4/5
我的困难在于所需嵌套的语法
首先,我有两个整数,应该从int转换为string,然后我有连接,然后为了使事情更简单,as关键字必须在组合查询之外(当它是子选择时),子选择必须在括号中。在把这句话重新写了10遍之后,我已经不知所措了
以下是我的两个问题
SELECT
COUNT(*)
FROM
Process_PartsIssued
WHERE
(Process_PartsIssued.OEMPartCode = Part_Catalog.ID
AND TechStockFlag = 'True'
AND PartReturned = 'False'
AND UsedByUser IS NULL)
SELECT
COUNT(*)
FROM
Process_PartsIssued
WHERE
(Process_PartsIssued.OEMPartCode = Part_Catalog.ID
AND PartReturned = 'False'
AND UsedByUser IS NULL)
首先,始终将长度与varchar()
一起使用
其次,您可以使用条件聚合通过单个查询完成此操作:
SELECT Stuff,
(select (cast(sum(case when water = 'wet' then 1 else 0 end) as varchar(255)) + '/' +
cast(sum(case when sky = 'blue' then 1 else 0 end) as varchar(255))
) as StockCount
FROM aTable
WHERE MyData = 'Rocks';
编辑:
对于您的特定查询:
SELECT stuff,
(SELECT cast(sum(case when TechStockFlag = 'True' AND PartReturned = 'False' AND UsedByUser IS NULL then 1 else 0 end) as varchar(255)) + '/' +
cast(sum(case when PartReturned = 'False' AND UsedByUser IS NULL then 1 else 0 end) as varchar(255))
FROM Process_PartsIssue
WHERE Process_PartsIssued.OEMPartCode = Part_Catalog.ID
) as StockCount
. . .
你有三个独立的问题: 1) 如何根据我不按筛选或分组的条件聚合行
COUNT(CASE WHEN TechStockFlag = 'True' THEN 1 END)
2) 如何将数字转换为字符串进行字符串连接
LTRIM(STR(number))
3) 如何从子查询外部引用某些内容
SELECT
x,
(SELECT .... FROM TableB WHERE ... = A.y)
FROM TableA A
或
综合起来:
SELECT Stuff, Partcount
FROM Part_Catalog
CROSS APPLY (
SELECT
LTRIM(STR(COUNT(CASE WHEN TechStockFlag = 'True' THEN 1 END)))
+ '/'
+ LTRIM(STR(COUNT(*))) PartCount
FROM Process_PartsIssued
WHERE Process_PartsIssued.OEMPartCode = Part_Catalog.ID
AND PartReturned = 'False'
AND UsedByUser IS NULL
) B
根据您的两个查询,您可以创建如下内容:
SELECT
CAST(SUM(CASE WHEN TechStockFlag = 'True' AND PartReturned = 'False' AND UsedByUser IS NULL THEN 1 ELSE 0 END) AS NVARCHAR(5)) + '/' +
CAST(SUM(CASE WHEN PartReturned = 'False' AND UsedByUser IS NULL THEN 1 ELSE 0 END) AS NVARCHAR(5)) AS 'StockCount'
FROM Process_PartsIssued
INNER JOIN Part_Catalog
ON Process_PartsIssued.OEMPartCode = Part_Catalog.ID
SELECT
CAST(SUM(CASE WHEN TechStockFlag = 'True' AND PartReturned = 'False' AND UsedByUser IS NULL THEN 1 ELSE 0 END) AS NVARCHAR(5)) + '/' +
CAST(SUM(CASE WHEN PartReturned = 'False' AND UsedByUser IS NULL THEN 1 ELSE 0 END) AS NVARCHAR(5)) AS 'StockCount'
FROM Process_PartsIssued
INNER JOIN Part_Catalog
ON Process_PartsIssued.OEMPartCode = Part_Catalog.ID