AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 250878
Accepted
Muab Nhoj
Muab Nhoj
Asked: 2019-10-12 11:15:39 +0800 CST2019-10-12 11:15:39 +0800 CST 2019-10-12 11:15:39 +0800 CST

我需要在 where 子句中多次引用相同的两列

  • 772

我有一个存储调查问题信息的表,我正在寻找基于性别、种族等的计数我的问题是我必须在 where 子句中多次引用相同的列,而我不是确定最好的方法。

例子:

我需要知道对调查问题 24 回答“是”以及对问题 4、16 或 24 回答“是”的所有人的数量。我尝试过使用 Or 语句和 IN 语句,但两者都不适合我。我正在考虑在 WHERE 子句中使用 case 语句,但不确定它需要是什么样子。任何帮助或建议将不胜感激!

  with TheTotal as
(select count(table.name_id)over (partition by
table.other_id) as blah
where sex='M'
 AND table.date between '2019-01-01' and '2019-09-30'
 AND (table.jq_nbr=35 AND table.answer='Y')

 AND (
  (jq_nbr=4 and answer='Y')
  OR (jq_nbr=16 and answer='Y')
  OR (jq_nbr=24 and answer='Y')
      )
sql-server t-sql
  • 2 2 个回答
  • 58 Views

2 个回答

  • Voted
  1. Best Answer
    AMtwo
    2019-10-13T08:21:23+08:002019-10-13T08:21:23+08:00

    拥有您的架构将有助于您的特定查询。如果没有完整的模式,这里有一些关于如何编写查询来获取结果的指针。

    假设您有一个dbo.SurveyResults表,其中有一些 ID ( survey_id) 用于识别给定用户响应的所有结果,您可以使用如下逻辑:

    • 计算所有答案为 Y 的“问题 35”,也存在答案为 Y 的问题 4、16 或 24 的答案。

    该查询看起来像这样:

    SELECT COUNT(DISTINCT r.survey_id)
    FROM dbo.SurveyResults AS r
    WHERE r.jq_nbr = 35
    AND r.answer = 'Y'
    AND EXISTS (SELECT 1 
                FROM dbo.SurveyResults AS r2
                WHERE r2.survey_id = r.survey_id
                AND r2.jq_nbr IN (4,16,24)
                AND r2.answer = 'Y'
                );
    

    对于稍微不同的架构,可能有一个“标题”表 ( dbo.Survey),每个用户完成的调查有一行,另一个表 ( dbo.SurveyResults) 是一个子表,每个问题回答一个行。有了这个,您可以使用稍微不同的“简单英语”描述,这可能会产生稍微不同的逻辑:

    • 计算所有用户完成的调查,其中受访者对问题 35 回答“Y”,并且对问题 4、16 或 24 中的至少一个回答“Y”。

    该查询可能如下所示:

    SELECT COUNT(s.survey_id)
    FROM dbo.Survey AS s
    WHERE EXISTS (SELECT 1 
                FROM dbo.SurveyResults AS r1
                WHERE r1.survey_id = s.survey_id
                AND r1.jq_nbr = 32
                AND r1.answer = 'Y'
                )
    AND EXISTS (SELECT 1 
                FROM dbo.SurveyResults AS r2
                WHERE r2.survey_id = s.survey_id
                AND r2.jq_nbr IN (4,16,24)
                AND r2.answer = 'Y'
                );
    
    • 4
  2. Antidiscrete
    2019-10-12T11:36:09+08:002019-10-12T11:36:09+08:00

    您可以嵌套您的CASE语句,如下所示:

    CASE WHEN <condition 1> THEN
                CASE WHEN <sub-condition 1> THEN <output 1> ELSE <output 2> END
        WHEN <condition 2> THEN
                CASE WHEN <sub-condition 2> THEN <output 3> ELSE <output 4> END
        ELSE <output 5> END AS CaseTest
    

    您可以使用 开始CASE和终止每个语句,如果它是最外层的还是仅在 a 中,您END可以选择添加它,并且您想要一个与之关联的列名。AS <alias>CASESELECT

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve