Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 连接SQL Server 2005中2条select count语句的语法_Sql Server - Fatal编程技术网

Sql server 连接SQL Server 2005中2条select count语句的语法

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

我有两个针对同一个表的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 
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