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 / 问题 / 336117
Accepted
tkmagnet
tkmagnet
Asked: 2024-02-22 05:42:25 +0800 CST2024-02-22 05:42:25 +0800 CST 2024-02-22 05:42:25 +0800 CST

查询满足多个条件和值的单个返回

  • 772

我试图找出一种方法,当一列中满足多个条件时对 ID 进行一次计数,同时在另一列中显示相同条件的总数。对于同一 ID,第一列的条件可以多次使用,但只需计数一次。有 2 个不同的 subGrp 值(1 和 2),但仅关注其中一个。这是我正在使用的两个表的示例数据:

create table vendor (
    subGrp char(1),
    subID varchar(10),
    subStatus char(1),
    subCat char(1) );

insert into vendor (
    subGrp, subID, subStatus, subCat)
values ('1','101','A','E'),
    ('1','105','A','F'),
    ('1','127','A','F'),
    ('1','132','A','F'),
    ('1','133','D','F'),
    ('1','154','A','F'),
    ('1','162','A','F'),
    ('1','167','W','E'),
    ('1','178','A','F'),
    ('1','196','A','F'),
    ('1','200','A','E'),
    ('1','205','A','F'),
    ('1','230','A','F'),
    ('1','231','A','F'),
    ('1','237','A','F'),
    ('1','259','A','F'),
    ('1','260','A','F'),
    ('1','271','A','F');

create table customer (
    cusID varchar(10),
    prodType char(1) );

insert into customer (
    cusID, prodType
values ('101','Y'),
    ('105','H'),
    ('105','Y'),
    ('127','H'),
    ('132','H'),
    ('132','Y'),
    ('132','Y'),
    ('132','F'),
    ('132','Y'),
    ('133','H'),
    ('133','S'),
    ('154','H'),
    ('154','Y'),
    ('154','Y'),
    ('154','Y'),
    ('154','Y'),
    ('162','H'),
    ('162','Y'),
    ('162','Y'),
    ('167','J'),
    ('178','H'),
    ('196','H'),
    ('200','Y'),
    ('205','H'),
    ('205','Y'),
    ('230','H'),
    ('230','Y'),
    ('230','Y'),
    ('230','Y'),
    ('230','Y'),
    ('231','H'),
    ('237','H'),
    ('259','H'),
    ('259','Y'),
    ('260','H'),
    ('271','H');

subGrp 将位于第一列中。在下一列中,我需要计算有多少 cusID 具有 Y、F 或 J prodType,同时具有 A 的 subStatus 和 F 的 subCat。唯一多次使用的值可在 prodType 中找到。

我想要以下结果:

亚组 产品类型总计 子组总计
1 7 14

因此,在 subGrp 1 中,如果 ID 包含 Y、F 或 J 的任意组合,则有 7 个 ID 仅计数一次,并且总共 14 个 ID 具有 A subStatus 和 F subCat。

它是第三方应用程序和数据库,因此我能做的事情有点有限(例如:使用不同时抛出错误:未找到标量函数)。他们告诉我这是 MS SQL。

另外,我不确定数据类型,因为我对此并不知情,但这就是我的假设。希望这是有道理的。提前致谢。

query
  • 1 1 个回答
  • 35 Views

1 个回答

  • Voted
  1. Best Answer
    Charlieface
    2024-02-22T11:30:21+08:002024-02-22T11:30:21+08:00

    首先将表格连接在一起,并使用正确的过滤器vendors。

    看起来您需要分组subGrp并cusID检查那些 Y、F、J 值,然后再次分组以subGrp获得总数。

    您可以使用条件MIN为每个具有这三个值中任意一个的值获取 1 或 null cusID。

    SELECT
      v.subGrp,
      SUM(v.prodType) AS prodTypeTotal,
      COUNT(*) AS subGrpTotal
    FROM (
        SELECT
          v.subGrp,
          c.cusID,
          MIN(CASE WHEN c.prodType IN ('Y', 'F', 'J') THEN 1 END) AS prodType
        FROM vendor v
        JOIN customer c ON c.cusID = v.subID
        WHERE v.subStatus = 'A'
          AND v.subCat = 'F'
        GROUP BY
          v.subGrp,
          c.cusID
    ) v
    GROUP BY
      v.subGrp;
    

    数据库<>小提琴

    • 3

相关问题

  • 在外键值上查询 PostgreSQL 9.0 表?

  • 如何获取用户好友的姓名?

  • 两个相关表之间的查询

  • 日期对齐和对匹配提取最好用 TSQL 或 C# 完成?

  • LIKE 选择文字中任意位置独立存在的单词

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