小编jdi*_*ids的帖子

如果没有找到行,如何使 SELECT COUNT(*) 在 GROUP BY 查询中返回 0

我正在编写一个查询来获取字段的计数并将其分组在一起,但我希望它返回所有值,即使计数为 0。

这是我所拥有的:

SELECT COUNT(*)
      ,PMI
  FROM Items AS AA
  JOIN Headers AS BB
  ON AA.DocID = BB.ID
 WHERE (DocDate = CAST(CONVERT(varchar(8), GETDATE() - 1, 1) AS datetime))
   AND PMI != ''
GROUP BY PMI
Run Code Online (Sandbox Code Playgroud)

这是我想看到的:

COUNT     PMI
    1     900330
    5     900702
    0     900550
    0     900331
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的:

COUNT     PMI
    1     900330
    5     900702
Run Code Online (Sandbox Code Playgroud)

我以前从未需要编写查询来完成此任务,因此如果这是微不足道的,我深表歉意。

编辑:我意识到这些表并不包含我正在寻找的所有项目。我有一个名为“lookup”的查找表,其中包含我希望查询计数的所有这些项目。

编辑2:谢谢大家。通过创建视图并使用查找表和外连接使其工作。这把戏做得很精彩。

t-sql

5
推荐指数
1
解决办法
1万
查看次数

优化 SQL Server 2016 中的 JSON 查询处理

我在一个表中有一个 JSON 列,我正在解析它以创建一个视图。我在 JSON 字符串中有 120 列,它产生大约 1750 行数据。问题是,查询运行需要 17 秒,它是一个基本查询,如下所示(选择了 120 列):

SELECT JSON_VALUE(json, '$.member.firstname') as MemberFirstName
     , JSON_VALUE(json, '$.member.lastname') as MemberLastName
     , JSON_VALUE(json, '$.member.phone') as MemberPhone
  FROM foobar
Run Code Online (Sandbox Code Playgroud)

我知道这个表会增长,我希望在使用代码创建视图之前获得更好的性能。我正在阅读一些关于创建计算列或使用DBCC PAGE函数的文章,但我想知道是否有一种不那么密集的方法来获得我们正在寻找的东西。

sql-server json sql-server-2016

1
推荐指数
1
解决办法
1227
查看次数

如果字段满足条件,则重复ROW_NUMBER

如果满足条件,我需要ROW_NUMBER将数据分配给特定用户.

ROW_NUMBER将正常递增,直到找到重复值.找到重复值后,我需要它使用相同的ROW_NUMBER,直到找到新值.

例如...

使用时

SELECT ROW_NUMBER() OVER (ORDER BY COMPANY) AS rownum
      ,Company
      ,Contact
  FROM TABLE
Run Code Online (Sandbox Code Playgroud)

我们显然可以期待这个结果

rownum     Company              Contact
     1     BOB'S BURGERS        BOB
     2     STEVE'S SARDINES     STEVE
     3     STEVE'S SARDINES     JERRY
     4     STEVE'S SARDINES     MARY
     5     LARRY's LOBSTER      LARRY
     6     CHRIS' COWS          CHRIS
Run Code Online (Sandbox Code Playgroud)

我想要得到的就是这个.每当公司名称没有变化时,重复ROW_NUMBER并在公司确实更改时继续增加数字

rownum     Company              Contact
     1     BOB'S BURGERS        BOB
     2     STEVE'S SARDINES     STEVE
     2     STEVE'S SARDINES     JERRY
     2     STEVE'S SARDINES     MARY
     3     LARRY'S LOBSTER      LARRY
     4     CHRIS' COWS          CHRIS
Run Code Online (Sandbox Code Playgroud)

我正在使用这个条件来查看该公司是否与之前的公司名称相符.如果条件为真,则返回2

ROW_NUMBER() OVER (PARTITION BY COMPANY …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

0
推荐指数
1
解决办法
705
查看次数

标签 统计

sql-server ×2

t-sql ×2

json ×1

sql-server-2016 ×1