2017-02-20 8 views
0

Я новичок в SQL я использовать MS SQL Server, у меня есть этот выбор и присоединяетсяКак различных строк без использования Distinct

SELECT t1.number 
    ,t2.site1 
    ,t2.Events_W 
    ,t3.site1 
    ,t3.Events_W_D 
    ,t4.site1 
    ,t4.Events_NW 
    ,t5.site1 
    ,t5.Events_NW_D 
    FROM [TEST].[ak].[test3] AS t1 
LEFT JOIN [TEST].[ak].[test2] AS T2 
    ON t1.number=t2.number AND t1.Events_W = t2.Events_W 
LEFT JOIN [TEST].[ak].[test2] AS t3 
    ON t1.number=t3.number AND t1.Events_W_D=t3.Events_W_D 
LEFT JOIN [TEST].[ak].[test2] as t4 
    ON t1.number=t4.number AND t1.Events_NW = t4.Events_NW 
LEFT JOIN [TEST].[ak].[test2] t5 
    ON t1.number=t5.number AND t1.Events_NW_D=t5.Events_NW_D 

Результат таков:

Number Site |event_w |site |event_w_d |site |Event_nt |site |event_nw_d 
anum |2014 |116 |2014 |99  |2358 |163 |2087 |129 
bnum |1570 |17  |1570 |76  |1196 |99  |1196 |577 
bnum |1570 |17  |1905 |111 |1508 |26  |1508 |427 
bnum |1196 |3  |1475 |2  |1508 |1  |8263 |5 
cnum |2087 |15  |NULL |NULL |2087 |92  |NULL |NULL 
dnum |1071 |14  |1905 |106 |1071 |21  |1426 |206 
gnum |2087 |36  |2087 |97  |2087 |92  |2087 |93 
rnum |123 |23  |123 |23  |NULL |NULL |NULL |NULL 

правильный результат должен быть таким:

Number |Site |event_w |site |event_w_d |site |Event_nt |site |event_nw_d 
anum |2014 |116 |2014 |99  |2358 |163 |2087 |129 
bnum |1196 |3  |1475 |2  |1508 |1  |8263 |5 
cnum |2087 |15  |NULL |NULL |2087 |92  |NULL |NULL 
dnum |1071 |14  |1905 |106 |1071 |21  |1426 |206 
gnum |2087 |36 |2087 |97  |2087 |92 |2087 |93 

мне нужно отчетливый номерами, но без использования 'Distinct '.

Помогите пожалуйста!

+0

Почему вы не хотите использовать 'DISTINCT '? Если вы хотите «исключить» строки, вам нужно использовать «GROUP BY» (обычно при использовании агрегата), «DISTINCT» или какой-либо другой метод (например, используя производную таблицу с «RANK» или «ROW_NUMBER») , Существуют ли критерии, которые вы хотите использовать для «ранжирования» записей в «номере», чтобы вы могли выбрать, какой из них вы хотите вернуть? – mroach

+0

Каковы ваши условия для получения результата? Также я замечаю, что в вашем O/P нет строки «rnum». – balaji

+0

Мой эксперт по базам данных сказал мне устранить дубликаты, но без использования отдельных, но я никогда не делаю этого раньше, без каких-либо различий. – Kalkov

ответ

0

Declare @Tep Table 
 
(
 
name varchar(100), City Varchar(500), Contct1 bigInt) 
 

 
INSERT INTO @Tep 
 
select 'R', 'Delhi', 7827492235 
 
Union All 
 
select 'S', 'Noida', 8827492235 
 

 
Union All 
 
select 'P', 'Noida', 7827492235 
 

 
Union All 
 
select 't', 'r', 9827492235 
 

 
--Get Unique Record Without Distinct 
 
SELECT * FROM (
 
SELECT ROW_NUMBER() OVER(PARTITION BY Contct1 ORDER BY Contct1) As RowID, 
 
name, 
 
City , Contct1 
 
FROM @Tep 
 
)T WHERE RowID=1

0

попробовать также ниже Approch Получить уникальную запись без отчетливых SELECT * FROM ( SELECT, ROW_NUMBER() OVER (PARTITION BY Contct1 ORDER BY Contct1) Как RowID, имя, города, Contct1 ОТ @Tep ) Т ГДЕ НЕ Contct1 В (

ВЫБОР Contct1 ОТ ( SELECT, ROW_NUMBER (НАД) (ПА RTITION BY Contct1 ORDER BY Contct1) Как RowID, имя, Сити, Contct1 ОТ @Tep ) T, где RowID = 2 )

также попробовать этот способ

Смежные вопросы