首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server 2005中连接2条select count语句的语法

Server 2005中连接2条select count语句的语法
EN

Stack Overflow用户
提问于 2013-12-19 22:53:36
回答 3查看 1.6K关注 0票数 0

对于另一个select查询中的子查询,对同一个表有两个计数查询。我想做的是这样的:

代码语言:javascript
运行
复制
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转换为字符串,然后进行连接,然后为了使事情更简单,当组合查询是子Selects时,as关键字必须在组合查询之外,而Sub-Selects必须在括号中。在重写了10次这份声明之后,我就快疯了

这是我的两个问题。

代码语言:javascript
运行
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-19 23:06:46

首先,总是在varchar()中使用长度。

第二,您可以使用条件聚合使用单个查询来完成此操作:

代码语言:javascript
运行
复制
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';

编辑:

对于您的特定查询:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2013-12-19 23:07:01

你有三个不同的问题:

1)如何根据不按或不按分组进行筛选的标准聚合行?

代码语言:javascript
运行
复制
    COUNT(CASE WHEN TechStockFlag = 'True' THEN 1 END)

2)如何将数字转换为字符串以进行字符串连接?

代码语言:javascript
运行
复制
    LTRIM(STR(number))

3)如何引用子查询之外的内容?

代码语言:javascript
运行
复制
    SELECT
      x,
      (SELECT .... FROM TableB WHERE ... = A.y)
    FROM TableA A

代码语言:javascript
运行
复制
    SELECT
      A.x,
      B.y
    FROM TableA A
    CROSS APPLY (SELECT .... FROM TableB WHERE ... = A.y) B

把它放在一起:

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2013-12-19 23:07:41

根据您的2个查询,您可以创建如下内容:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20693284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档