我有2个表,其中Table1
(t1)具有主要数据,Table2
(t2)具有数据之间的关系。
我需要一个查询来从条件如
的表(t1)中获取数据WHERE t1.row = 1 AND t1.code = s1
但是此查询以(t1 left join t2 on t1.row = t2.row
开头,然后生成的答案将在t1的t2.trow = t1.row上再次加入。
然后答案必须有一些列和行,这些列和行显示在底部。
您能帮我这个疑问吗?
我写了这个查询:
SELECT
t1.code, t1_1.bed, t1_1.bes,
t2.t1row, t2.t2row
FROM
dbo.t1
LEFT OUTER JOIN
dbo.t2 ON t1.row = t2.t1row
LEFT OUTER JOIN
dbo.t1 t1_1 ON t2.t2row = t1_1.row
WHERE
t1.code = s1 And t1.row = '1'
但是此查询返回2行,而我需要5行!
答案 0 :(得分:1)
我不确定为什么要链接回t1
,因为只需将t1
与t2
结合即可产生所需的结果。如果您SELECT DISTINCT
,那么两个相似的行将被替换为一个
SELECT DISTINCT
t1.row,
CASE WHEN trow=1 THEN 'OK' ELSE null END AS t2_row,
t1.bed, t1.bes, t1.code
FROM
t1
LEFT JOIN t2
ON t1.row = t2.frow
WHERE t1.code='s1'
ORDER BY t1.row;
结果:
row t2_row bed bes code
1 10000 s1
2 OK 7500 s1
3 OK 2500 s1
4 20000 s1
5 20000 s1
答案 1 :(得分:0)
在t2.trow列中使用CASE,并使用DISTINCT删除重复项
SELECT DISTINCT row,
CASE WHEN trow = 1 THEN 'OK'
ELSE ''
END as t2_row,
bed, bes, code
FROM t1
LEFT JOIN t2 ON t1.row = frow
AND code = 's1'
答案 2 :(得分:0)
我认为这可以满足您的要求:
select t1.*,
(case when exists (select 1
from t2
where t2.frow = t1.row and
t2.frow <> 1
)
then 'OK'
end)
from t1
where t1.code = 's1';