T-SQL查询以返回在特定列中具有所有值的行

时间:2019-12-18 23:22:07

标签: sql sql-server tsql

我有一个临时表,该表通过一些业务逻辑进行填充,并显示客户和在库存中有该产品的卖方所要求的产品。

以下是表格内容的简化视图:

ID  ProductID   SellerID
1   1000           1
2   2000           1
3   3000           1
4   1000           2
5   3000           2
6   1000           3
7   3000           3

我需要编写一个 T-SQL 查询,该查询仅返回其库存中包含所有请求的产品的SellerID(或SellerID列表)。在此特定示例中,我们可以看到只有SellerID = 1拥有所有产品(ProductID的1000、2000和3000),因此查询应仅返回一个结果集:

SellerID = 1

在某些情况下,多个卖家可能拥有所有产品,因此应返回正确的SellerID列表。 (请根据需要随意编辑问题的标题)。

有什么想法或解决方案吗?谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用public function encrypt() { $data = [ 'my_account' => "100081", 'status' => "2", 'ID' => "3", 'message' => 'Approved' ]; $stringData = json_encode($data); $key = utf8_encode("testt123boowe456"); $iv = utf8_encode("13313310"); $result = openssl_encrypt($this->zeroPadding(utf8_encode($stringData), 8), 'DES-EDE3-CBC', $key, 0, $iv); return bin2hex($result); } group by

having

这假定行没有重复。

我要补充一点,您可能有一些卖家没有所有产品。如果您想让卖家购买最多产品:

select sellerid,
from t
group by sellerid
having count(*) = (select count(distinct productid) from t);

您也可以在不使用子查询的情况下对此进行措辞:

select s.*
from (select sellerid, count(*) as num_products,
             rank() over (order by count(*) desc) as seqnum
      from t
      group by sellerid
     ) s
where seqnum = 1;

答案 1 :(得分:1)

您通过SellerID进行汇总,并使用having子句进行过滤,该子句将每个ProductID的不同SellerID的计数与不同的{{1}的总数进行比较}可用的表格:

ProductID