我正在使用sql server 2012.我有两个表,M_SALES& M_SALES_COUNTRY。 M_SALES包含一个名为sale_id的主键。 M_SALES_COUNTRY还包含一个名为sale_id的字段,它是外键。 M_SALES_COUNTRY还包含一个名为country_code的字段,该字段可以为null。
所以M_SALES包含一个独特的sale_id。 M_SALES_COUNTRY可以包含多个相同的sale_id。
对于下面的查询,M_SALES_COUNTRY中的1个记录(可能有多个,但我只想要一个)为M_SALES表中的每个sales_id返回,这很好,我想要的。但是我想知道是否可以添加更多条件。
如果M_SALES中的sale_id引用M_SALES_COUNTRY中的多个sale_id,我希望它返回country_code字段不为空的记录。如果所有记录country_code都为null,则返回null。请参阅下面的两个简单示例。
sale_id country_code
AAA5555 null
AAA5555 null
AAA5555 D56
记录我想要的是D56。
下一个例子
sale_id country_code
AAA5555 null
AAA5555 null
AAA5555 null
只要返回一个记录就会在这里做任何记录。
查询
select M_SALES.*, M_SALES_COUNTRY.*
from M_SALES cross apply
(
select top 1 M_SALES_COUNTRY.*
from M_SALES_COUNTRY
where M_SALES.sale_id = M_SALES_COUNTRY.sale_id
) MA_DEALS_COUNTRY
order by M_SALES.sale_id
答案 0 :(得分:0)
您可以使用子查询消除重复项并加入该表,即
SELECT *
FROM M_SALES
JOIN (SELECT sales_id, max(country_code) as country_code
FROM M_SALES_COUNTRY GROUP BY sales_id
) M_SALES_COUNTRY
ON M_SALES_COUNTRY.sales_id = M_SALES.sales_id
我还会考虑清理M_Sales_Country表,以便sales_id是唯一的,或者创建另一个版本,其中包含销售ID的唯一值。