Я хочу выбрать строки, в которых

  1. Данные1 и Данные2 не 0 для одного идентификатора
  2. а также выбрать все код 5

Таблица 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
Duffer 21 Авг 2018 в 09:13

5 ответов

Лучший ответ

Согласно настройке данных это также решит проблему

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
1
Chanukya 21 Авг 2018 в 06:34
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
Stanislav Kundii 21 Авг 2018 в 06:15

Согласно результирующему набору, я могу наблюдать, что запись будет рассматриваться, если кто-либо из данных Data1 и Data2 будет больше 0. И вы пытаетесь получить данные с фильтром, поскольку оба они не равны нулю. используйте оператор OR вместо And.

select ID, CODE, DATA1, DATA2  from table1 where  (DATA1 !=0 or DATA2 !=0) or Code =5
1
maulik kansara 21 Авг 2018 в 06:31

Надеюсь это поможет!!

    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
0
Sahi 21 Авг 2018 в 10:12

Выберите * из таблицы 1, где данные 1 <> 0 и данные 2 <> 0 или код = 5

0
Yasa 21 Авг 2018 в 08:38
51942611