【问题标题】:Sql query to getsql查询获取
【发布时间】:2015-03-11 20:23:03
【问题描述】:

我有一个表格,其中包含包裹中的物品列表

PackageId、ItemId

一个包裹可能包含超过 1 件物品。

我想获取包含项目 1 和 2 的包裹的列表或数量

我该怎么做?

【问题讨论】:

  • 尝试谷歌搜索方法...提示:Group by 带有 Having 子句
  • 这是一个使用COUNTGROUP BYHAVING 的非常简单/常见的查询。
  • "Microsoft SQL" 不是很清楚——你说的是SQL Server(完整的关系数据库系统),那么请添加sql-server 作为你的标签。或者您是在谈论将 SQL 与 Microsoft Access 一起使用?然后请添加ms-access 作为您的标签

标签: sql sql-server count


【解决方案1】:

一种方法是在(packageid) 上进行分组,并要求每个组都有两个项目:

select  packageid
from    YourTable
group by
        packageid
having  max(case when itemid = 1 then 1 end) = 1
        and max(case when itemid = 2 then 1 end) = 1

另一个是intersect 运算符。要求包在两个集合中:

select  packageid
from    YourTable
where   itemid = 1
intersect
select  packageid
from    YourTable
where   itemid = 2

inner join 的另一种方式。对于第 1 项的每一行,要求与第 2 项相同的包裹有另一行:

select  distinct yt1.packageid
from    YourTable yt1
join    YourTable yt2
on      yt1.packageid = yt2.packageid
where   yt1.itemid = 1
        and yt2.itemid = 2

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2018-11-09
    • 2020-08-21
    相关资源
    最近更新 更多