0

首先,我不确定标题是否代表了最好的问题。欢迎任何更好的建议。我的问题是我有下表:

+----+----------+--------+------------------+
| 身份证 | 供应商 | 买家 | 验证码 |
+----+----------+--------+------------------+
| 1 | 一个 | Z | 937886521 |
| 2 | 一个 | X | 937886521 |
| 3 | 乙| Z | 145410916 |
| 4 | C | 五 | 775709785 |
+----+----------+--------+------------------+

我需要显示具有 BUYER Z, X 的 SUPPLIERS A 和 B。但是,我希望这个条件是一对一的关系,而不是一对多的关系。也就是说,对于供应商 A,我想显示 ID 为 1、2 的列。对于供应商 B,我只想显示列 3。以下脚本将向供应商 A 显示所有可能的买家(我不想要):

SELECT *   
FROM   validation   
WHERE  supplier IN ( 'A', 'B' )   
       AND buyer IN ( 'X', 'Z');

这将显示以下对:(A,Z), (A,X), (B, Z)。我只需要在一个语句中显示以下内容: (A,X)(B,Z) 。

期望的结果应该是这样的:

+----+----------+--------+------------------+
| 身份证 | 供应商 | 买家 | 验证码 |
+----+----------+--------+------------------+
| 2 | 一个 | X | 937886521 |
| 3 | 乙| Z | 145410916 |
+----+----------+--------+------------------+
4

4 回答 4

2

您可以更新 WHERE 子句以过滤所需的对:

select *
from sample
where (upper(supplier),upper(buyer))
in (('A','X'),('A','Y'),('A','Z'),('B','X'),('B','Y'),('B','Z'));

我根据您的混合案例示例使用了 UPPER 函数。

于 2013-11-11T06:06:41.127 回答
0

看看这是不是你需要的:

SELECT MAX(id),
       supplier, 
       MAX(buyer), 
       MAX(validation_code)
FROM
(SELECT *
 FROM Validation
 WHERE supplier IN ( 'A', 'B' ) AND buyer IN ( 'X', 'Z')
) filtered
GROUP BY supplier;

SQL小提琴

我曾经GROUP BY supplier将表格展平,并包含、和的最大值IDBuyerValidation_Code

于 2013-11-11T06:50:41.390 回答
0

试试这个查询:

select ID,SUPPLIER,BUYER,VALIDATION_CODE from
(select
t2.*,t1.counter
from
validation t2,
(select supplier,count(supplier) as counter from hatest group by supplier)t1
where 
t1.supplier = t2.supplier)t3
where t3.supplier in('A','B') and
id = case when t3.counter > 1 then 
(select max(id) from validation t4 where t4.supplier = t3.supplier) else t3.id end;
于 2013-11-11T08:35:57.990 回答
0

或者,你可以试试这个:

SELECT id
     , supplier
     , buyer
     , validation_code 
FROM (SELECT id
             ,max(id) OVER(PARTITION BY supplier) AS maxid
             ,supplier
             ,buyer
             ,validation_code
              FROM sample) AS x
WHERE x.id=x.maxid

您可以查看内部 SQL 语句的结果以了解它的作用。

于 2013-11-11T08:16:03.987 回答