我正在使用SQL Server 2012。
我有两张桌子Sales
& Country
。 Sales
约有。 15列,其中一列是名为s_id
的主键,Country
有5列,包含一个也称为s_id
的外键。
我想编写一个查询,它只会选择Sales表中的记录,其中s_id在Country表中有多个记录。然后,从此查询返回的列表中执行另一个查询,该查询应仅返回字段usd_value > 0
或eur_value > 0
的行。 usd_value
和eur_value
都是Sales
表中的字段。
以下是一个简短而简单的例子,希望有所帮助。
Sales
s_id usd_value eur_value
MN13 0 5
MN14 0 0
MN15 325 125
MN28 320 0
Country
s_id country
MN13 NL
MN13 FR
MN14 GB
MN14 US
MN15 US
MN28 CA
MN28 US
MN28 MX
Result I would like to see
s_id usd_value eur_value
MN13 0 5
MN28 320 0
答案 0 :(得分:2)
试试这个:
select s.*
from sales s
where
(
s.eur_value > 0
or
s.usd_value > 0
)
and s.s_id
in
(
select s_id
from country
group by s_id
having count(*) > 1
)
答案 1 :(得分:1)
尝试这样
SELECT
COUNT(c.[s_id]) Total,
s.[usd_value],
s.[eur_value]
FROM Sales s
LEFT JOIN Country c ON c.[s_id] = s.[s_id]
GROUP BY s.[s_id]
HAVING Total > 1
AND (usd_value > 0 OR eur_value > 0)
答案 2 :(得分:1)
试试这个
SELECT S.* FROM
Sales S JOIN
(
SELECT s_id,Count(s_id) From Country Group By s_id Having Count(s_id) > 1
) R On S.s_id = R.s_id
Where S.usd_value > 0 Or S.eur_value >0
<强> Fiddle Demo 强>
输出:
S_ID USD_VALUE EUR_VALUE
MN13 0 5
MN28 320 0