我要选择其中的行
表1-
ID Code Data1 Data2
A 1 0 0
A 2 0 11.68
A 3 0.97 3.51
B 1 0 0
B 2 0.15 5.35
B 3 0.58 7.39
C 5 0 0
所以我想要输出表如下:
ID Code Data1 Data2
A 2 0 11.68
A 3 0.97 3.51
B 2 0.15 5.35
B 3 0.58 7.39
C 5 0 0
我写的查询如下,但是没有用,有人可以帮我吗。
select ID, CODE, DATA1, DATA2 from table1 where (DATA1 !=0 and DATA2 !=0) or Code =5
答案 0 :(得分:1)
select ID, CODE, DATA1, DATA2 from table1 a where
a.Code = 5 OR
NOT EXISTS
(
SELECT 1 FROM table1 b WHERE a.Id = b.Id AND b.Data1 = 0 AND b.Data2 = 0
)
答案 1 :(得分:1)
根据结果集,我可以观察到,如果Data1和Data2中的任何一个大于0,则将考虑该记录。您正在尝试使用过滤器获取数据,因为两者都不为零。使用OR
运算符而不是And
。
select ID, CODE, DATA1, DATA2 from table1 where (DATA1 !=0 or DATA2 !=0) or Code =5
答案 2 :(得分:1)
根据数据设置,这也将解决问题
CREATE TABLE Table1
([ID] varchar(1), [Code] int, [Data1] numeric(22,6), [Data2] numeric(22,6))
;
INSERT INTO Table1
([ID], [Code], [Data1], [Data2])
VALUES
('A', 1, 0, 0),
('A', 2, 0, 11.68),
('A', 3, 0.97, 3.51),
('B', 1, 0, 0),
('B', 2, 0.15, 5.35),
('B', 3, 0.58, 7.39),
('C', 5, 0, 0)
;
select ID, CODE, DATA1, DATA2 from table1 a where Data1 <> 0 or Data2 <> 0
or code=5
输出
ID Code Data1 Data2
A 2 0 11.68
A 3 0.97 3.51
B 2 0.15 5.35
B 3 0.58 7.39
C 5 0 0
答案 3 :(得分:0)
从表1中选择*,其中数据1 <> 0和数据2 <> 0或代码= 5
答案 4 :(得分:0)
希望这会有所帮助!
CREATE TABLE #table1(ID VARCHAR(10),Code INT,Data1 float,Data2 float)
INSERT INTO #table1
SELECT 'A',1,0,0 UNION ALL
SELECT 'A',2,0,11.68 UNION ALL
SELECT 'A',3,0.97,3.51 UNION ALL
SELECT 'B',1,0,0 UNION ALL
SELECT 'B',2,0.15,5.35 UNION ALL
SELECT 'B',3,0.58,7.39 UNION ALL
SELECT 'C',5,0,0
;with cte
AS
(
SELECT COUNT(*) OVER(partition by id)c,
* from #table1
)
Select id,code,Data1,Data2 from cte
where 1=(CASE WHEN c=1 THEN 1
WHEN Data1<>0 or Data2 <>0 then 1
ELSE 0
END)
Drop table #table1