首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用大小写区分的SQL计数:如何在不使用exists的情况下进行子查询?

用大小写区分的SQL计数:如何在不使用exists的情况下进行子查询?
EN

Stack Overflow用户
提问于 2022-05-02 08:23:15
回答 1查看 161关注 0票数 0

上下文: Server中的有一个很大的XLSX文件,我正在映射到一个文件。每次都会有一个名为'referentie‘的列获得不同的值。我需要计数唯一的值,并显示相应的代码。(请注意,这是一个较大SELECT语句中的子查询。我无法添加额外的聚合函数。)

  1. 我需要计算JSON数组输入的唯一值(输出是XML)。(已完成)
  2. 根据检索到的唯一计数(问题)显示值

问题:在查询中,您将看到有多个计数不同的情况。SQL抛出正常的错误:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

My查询:

代码语言:javascript
运行
复制
(SELECT COUNT(DISTINCT CASE WHEN Referentie > 10 THEN N'CON1' END) AS [HEADER/CHECK],
                        COUNT(DISTINCT CASE WHEN Referentie <= 10 AND Referentie > 29 THEN N'CON2' END) AS [HEADER/CHECK],
                        COUNT(DISTINCT CASE WHEN Referentie <= 30 AND Referentie >= 50 THEN N'CON3' END) AS [HEADER/CHECK],
                        COUNT(DISTINCT CASE WHEN Referentie <= 50 AND Referentie >= 500 THEN N'CON4' END) AS [HEADER/CHECK]
                FROM OPENJSON(@Json, N'$.Blad1')
                WITH (Referentie nvarchar(100) N'$.Referentie')) AS [HEADER/CHECK],

问题:

  • 这里正确的语法是什么使我的逻辑工作?

文件中的JSON :

代码语言:javascript
运行
复制
@Json = N'{
   "Blad1":[
      {
         removed
      }
   ]
}'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-02 10:58:18

首先,你对你想要达到的目标有些不清楚。您说您正在设法计算唯一值,但不显示依赖于此的值。

你的代码甚至不能处理这个。它实际上所做的是检查Referentie是否在定义的数字内(因为它是一个字符串而没有任何意义),然后与单个字符串区分开来。然后,它多次返回这个参数,每个参数都返回一次。

相反,您需要一个单独的COUNT (DISTINCT Referentie),它的周围有一个CASE来检查它的大小。

当前代码还有另一个问题。><的条件是相反的。< 29应该是< 30

代码语言:javascript
运行
复制
SELECT
  'SomeValue' AS xyz,
  (
    SELECT
      CASE 
        WHEN COUNT(DISTINCT Referentie) < 10
          THEN N'CON1'
        WHEN COUNT(DISTINCT Referentie) >= 10 AND COUNT(DISTINCT Referentie) < 29
          THEN N'CON2'
        WHEN COUNT(DISTINCT Referentie) >= 30 AND COUNT(DISTINCT Referentie) <= 50
          THEN N'CON3'
        WHEN COUNT(DISTINCT Referentie) >= 50 AND COUNT(DISTINCT Referentie) <= 500
          THEN N'CON4'
      END
    FROM OPENJSON(@Json, N'$.Blad1')
      WITH (
        Referentie nvarchar(100)
      ) AS j
  ) AS [HEADER/CHECK]
FROM (VALUES(0)) DummyTable(DummyValue)   -- don't know what the rest of your query is
FOR XML PATH(N''), ROOT(N'rootElement'),TYPE

db<>fiddle

另外,如果您确实希望从子查询中获得多个列,则需要将其放置在APPLY中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72084085

复制
相关文章

相似问题

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