问题描述
我有两个表:T1 =供应商,T2 =附加数据。
值:
123 | supplier1 | 10000
124 | supplier2 | 10001
125 | supplier3 | 10002
T2 Additional_data列:id,supplier_id,additional_category_name,值
值:
334 | supplier1 | Street | Flower Street
335 | supplier1 | Bank | National Bank
336 | supplier2 | Street | Different Street
337 | supplier2 | Bank | National Country Bank
338 | supplier2 | VAT_NUMBER | DE23231231
339 | supplier3 |Street | This Street
340 | supplier3 |leader | John M
341 | supplier3 | VAT_NUMBER | DE12312311
SELECT s.Code,s.Name,ad.additional_category_name as ADDITIONAL_CATEGORIES,ad.value
FROM ADM_supplier s LEFT OUTER JOIN
ADM_supplier_ADDITIONAL_DATA ad
on s.ID = ad.supplier_id;
这给了我所有的供应商,即使他们的附加数据中没有VAT_NUMBER:
CODE | NAME | ADDITIONAL_CATEGORIES | VALUE
10000 supplier1 Street Flower Street
10000 supplier1 Bank National Bank
10001 supplier2 Street Different Street
10001 supplier2 Bank National Country Bank
10001 supplier2 VAT_NUMBER DE23231231
10002 supplier3 Street This Street
10002 supplier3 leader John M
10002 supplier3 VAT_NUMBER DE12312311
如您所见,并非所有供应商都有相同的附加类别。但我有兴趣获得所有供应商及其增值税清单的清单。如果VAT_Number为空,则可以添加“ N / A”:
所需的输出:
CODE | NAME | VAT_NUMBER
10000 supplier1 N/A
10001 supplier2 DE23231231
10002 supplier3 DE12312311
请让我知道如何实现这一目标。
谢谢!
解决方法
只需过滤left join
:
select s.code,s.name,coalesce(ad.value,'N/A') as vat_number
from adm_supplier s
left outer join adm_supplier_additional_data ad
on ad.supplier_id = s.id
and ad.additional_category_name = 'VAT_NUMBER'
,
在最终结果上,使用分组和大小写以下查询来获得所需结果。
SELECT CODE,NAME,COALESCE(MAX(CASE WHEN ADDITIONAL_CATEGORIES = 'VAT_NUMBER' THEN VALUE END),'N/A') AS VALUE
FROM Table1 A GROUP BY CODE,NAME;