Member 13484485 Ответов: 3

Я получаю несколько значений не так как ожидалось может ли u pls помочь мне


TEMP1
--------------------
COL1 COL2 COL3
--------------------
MW12 null A
MW13 13 A
нуль нуль
нуль нуль
MW16 16 A
MW17 null A
MW18 18 A
MW20 20 A
MW22 22 A

TEMP2
--------------------
COL1 COL2 COL3
--------------------
нуль нуль
нуль нуль
нуль, 14 а
MW15 15 A
MW16 16 A
MW17 17 A
MW19 18 A
MW20 21 A
нуль 23 а

предполагаемые результаты:

MW12
MW13
14
НУЛЕВОЙ
MW16
MW17
MW18
МВ20
MW22,23(ЗАПИСИ РАЗДЕЛЬНЫЕ)

Что я уже пробовал:

ВЫБРАТЬ РАЗЛИЧНЫЕ
(
ДЕЛО
При T2.На col1 имеет значение null и T2.Столбец col2 является нулем и T1.Столбец col2 null тогда Т1.На col1--1
Когда T2.COL1 равен нулю, а T2.COL2 равен нулю, то T1.COL1--2
Когда Т1.Столбец col2 является нулем и T2.На col1 имеет значение null и T1.На col1 null тогда Т2.Столбец col2--3
Когда Т1.Столбец col2=Т2.Col2 и Т2.На col1=Т1.Col1 и потом Т1.На col1--5
Когда T2.COL1=T1.COL1 и T1.COL2 равно нулю, то T1.COL1--6
Когда Т1.Столбец col2=Т2.Col2 и Т2.На col1!=Т1.Col1 и потом Т1.На col1--7
Когда Т1.Столбец col2!=Т2.Col2 и Т2.На col1=Т1.Col1 и потом Т1.На col1--8
Когда T1.COL2!=T2.COL2 и T2.COL1 равно нулю, то T1.COL2 --9
Когда Т1.Столбец col2 является нулем и T1.НА COL1 ИМЕЕТ ЗНАЧЕНИЕ NULL ТОГДА NULL--4
КОНЕЦ
) ИДЕНТИФИКАТОР СОТРУДНИКА
Из TEMP1 T1,TEMP2 T2, где T1.COL3=T2.COL3;

3 Ответов

Рейтинг:
0

Santosh kumar Pithani

SELECT  DISTINCT
           CASE WHEN  (t1.col1 IS NULL) AND (t2.col1 IS NOT NULL)  THEN null 
                WHEN  t2.col1 IS NULL THEN cast(t2.col2 as Varchar(50)) 
                 ELSE t1.col1  END AS Result
 FROM #TEMP1 T1 INNER JOIN #TEMP2 T2
                           ON(T1.COL3=T2.COL3)


CHill60

5 как бы это не вернуть точно так же, как ОП хотел

Santosh kumar Pithani

Спасибо Вам CHill60!

Рейтинг:
0

CHill60

Совершенно непонятно, чего вы на самом деле пытаетесь достичь!

Во-первых, я думаю, что вам нужно узнать о ОБЪЕДИНЯТЬСЯ[^] функция

Поскольку вам, по-видимому, нужны значения из обеих таблиц, то вам также нужно знать о СОЮЗ[^] оператор

Кажется, нет никакой логики в том, почему вы также не хотите MW15 и MW19 в своих результатах, но самое близкое, что я могу получить, - это

select COALESCE(col1, col2) from temp1 
UNION 
SELECT COALESCE(col1, col2)  FROM temp2
Обратите внимание, что я использовал UNION, а не UNION ALL, чтобы эффективно удалить дубликаты для меня.

Наконец, тот факт, что ваш код вообще выполнялся, подразумевает, что вы сохранили числа в виде полей символьного типа - это очень плохой дизайн таблицы.


Рейтинг:
0

Mujeebahmad

select distinct isnull(isnull(isnull(t1.COL1,t1.COL2),t2.COL1),t2.col2)

FROM TEMP1 T1,TEMP2 T2 WHERE T1.COL3=T2.COL3 


CHill60

Это не я проголосовал против вашего решения, но вот некоторые возможные причины, по которым это произошло...
1. Вместо того, чтобы использовать функцию isnull(функция isnull(функция isnull(... рассмотреть вопрос об использовании сливаются - это гораздо более эффективно, что вложенность вызовов функции isnull

2. способ соединения таблиц очень старомоден - лучше использовать явное соединение

3. ваше решение возвращает строки, которые ОП не хотел (MW15 и MW19). Честно говоря, у меня тоже, но, по крайней мере, я указал на это