SQL - 如果有多个结果,则显示唯一结果或单词

时间:2015-04-21 12:33:45

标签: sql sql-server

我正在搜索特定的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查询中做到这一点。如果有人有想法,我想知道。

感谢。

2 个答案:

答案 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