2017-02-20 2 views
0

je suis nouveau dans SQL j'utilise MS SQL Server, j'ai cette sélection et rejointComment lignes distinctes sans utiliser 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 

Le résultat est le suivant:

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 

le bon résultat doit être ceci:

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 

i doivent distinctes par des nombres, mais sans utiliser 'distinct '.

Aide S'il vous plaît!

+0

Pourquoi ne voulez-vous pas utiliser 'DISTINCT '? Lorsque vous voulez "éliminer" des lignes, vous devez utiliser soit "GROUP BY" (typiquement lors de l'utilisation d'un agrégat), "DISTINCT", soit une autre méthode (comme utiliser une table dérivée avec "RANK" ou "ROW_NUMBER") . Y a-t-il des critères que vous voulez utiliser pour "classer" les enregistrements dans un "nombre" afin que vous puissiez choisir celui que vous voulez retourner? – mroach

+0

Quelles sont vos conditions qui arrivent au résultat de sortie? Aussi, je remarque qu'il n'y a pas de rangée 'rnum' dans votre O/P. – balaji

+0

Mon expert en base de données m'a dit d'éliminer les doublons mais sans utiliser distinct, mais je ne le fais jamais avant sans distincte. – Kalkov

Répondre

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

Essayez aussi ci-dessous approch Obtenez unique enregistrement sans Distinct SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION PAR Contct1 ORDER BY Contct1) Comme le nom RowID, , City, Contct1 DE @Tep ) T OÙ Contct1 PAS En (

SELECT Contct1 DE ( SELECT ROW_NUMBER() OVER (PA RTITION PAR Contct1 ORDER BY Contct1) Comme RowID, nom , Ville, Contct1 DE @Tep ) T où RowID = 2 )

aussi essayer cette façon