我正在搜索特定的SQL查询。
我有两张桌子:"文件"和#34; DOCUMENT_CONTENT"类似于:
DOCUMENT
Number | Date |
---------+-------------+
48796 | 21/04/2015 |
48797 | 21/04/2015 |
DOCUMENT_CONTENT
Number | Product_Code | Supplier | Quantity |
---------+----------------+------------+------------+
48796 | 8008554 | SupplierA | 3 |
48796 | 8008579 | SupplierA | 4 |
48796 | 9870560 | SupplierA | 5 |
48797 | 8008554 | SupplierA | 7 |
48797 | 8081784 | SupplierB | 1 |
48797 | 8217471 | SupplierA | 23 |
在此示例中,我有两个文档48796和48797,其中包含多个产品代码,供应商和数量。
对于文件号48796,供应商只是"供应商A"但对于48797,有供应商A和供应商B.
我想生成这个结果:
DOCUMENT
Number | Date | Supplier |
---------+-------------+-------------+
48796 | 21/04/2015 | SupplierA |
48797 | 21/04/2015 | several |
这意味着,如果在文档内容中有不同的供应商,我会显示"几个"否则我会显示供应商名称。
我不知道如何在SQL查询中做到这一点。如果有人有想法,我想知道。
感谢。
答案 0 :(得分:7)
这里的技巧是在一个案例中进行聚合并测试结果:
select d.*, dc.supplier
from DOCUMENT d join
(select dc.number,
(case when min(dc.Supplier) = max(dc.Supplier) then min(dc.Supplier)
else 'Several'
end) as supplier
from DOCUMENT_CONTENT dc
group by dc.number
) dc
on dc.number = d.number;
这使用子查询来计算新的供应商名称,因此您可以轻松地放入document
中的所有列。如果您在document_content
中丢失了文档,那么您可能希望使用left join
。
答案 1 :(得分:0)
Select Case when count(Supplier) = 1 then Max(supplier) else 'several' end
from DOCUMENT D Inner Join DOCUMENT_CONTENT DC on D.Number = DC.Number
Group by D.Date , D.Number