powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему происходит дублирование
8 сообщений из 8, страница 1 из 1
Почему происходит дублирование
    #39610416
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет все.
Ребят, подскажите, пожалуйста, по какой причине у меня в таблице могут дублироваться столбцы. Дублирование началось, когда я добавила подзапрос t
Может соединение неверное? Или может еще что не правильно?
Причем дублирование зависит от того, по какой таблице я устанавливаю связь. Если
Код: sql
1.
on  t.x_project=b.x_project

то дублируются строки, которых нет в таблице b, если
Код: sql
1.
on  t.x_project=a.x_project

то дублируется строка, которой нет в 'a'

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Select pp.PROJECTCODE,pp.DESCRIPTION,
a.GeolLenght,
b.SendSample, c.assay, TakenSample 
From 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as GeolLenght 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) a
full join (
 select  s.PROJECTCODE as x_project,
count(sd.sampleid) as SendSample 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID 
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) b on a.x_project = b.x_project
full join (
 select  ss.PROJECTCODE as x_project,
count(ts.sampleid) as TakenSample 
from  SAMPLEDETAILS ts  left join sample ss on ss.SAMPLEID=ts.SAMPLEID 
where cast((case when name = 'SampDateTaken' then value end) as date) between '13-feb-2017' and '20-feb-2017'  
 group by PROJECTCODE
) t on  t.x_project=b.x_project

full join
(Select projectcode as x_project, count(sss)assay from (select distinct s.sampleid as sss,PROJECTCODE 
from cORPSAMPLEASSAY c left join sample s on s.SAMPLEID= c.SAMPLEID 
where cast([LOADDATE] as date) between '2017-02-13' and '2017-03-10')abc
group by abc.PROJECTCODE)c on a.x_project=c.x_project
left join PROJECT pp on pp.PROJECTCODE=c.x_project or pp.PROJECTCODE=b.x_project or pp.PROJECTCODE=a.x_project or pp.PROJECTCODE=t.x_project
group by pp.PROJECTCODE,a.GeolLenght,pp.DESCRIPTION,
b.SendSample, c.assay,TakenSample  
order by pp.DESCRIPTION

...
Рейтинг: 0 / 0
Почему происходит дублирование
    #39610418
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,
Код: sql
1.
on  t.x_project=isnull(b.x_project,a.x_project)
...
Рейтинг: 0 / 0
Почему происходит дублирование
    #39610421
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly, спасибо. Кажется сработало
...
Рейтинг: 0 / 0
Почему происходит дублирование
    #39610444
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopellykatish444,
Код: sql
1.
on  t.x_project=isnull(b.x_project,a.x_project)



Не сработало. Вернее помогло, только для тех конкретных дат, которые были установлены. При изменении не объединяет, дублирует...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 Select pp.PROJECTCODE,pp.DESCRIPTION,
a.GeolLenght,
b.SendSample, c.assay, TakenSample 
From 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as GeolLenght 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) a
full join (
 select  s.PROJECTCODE as x_project,
count(sd.sampleid) as SendSample 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID 
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) b on a.x_project =b.x_project


full join
(Select projectcode as x_project, count(sss)assay from (select distinct s.sampleid as sss,PROJECTCODE 
from cORPSAMPLEASSAY c left join sample s on s.SAMPLEID= c.SAMPLEID 
where cast([LOADDATE] as date) between '2017-02-13' and '2017-03-10')abc
group by abc.PROJECTCODE)c on a.x_project=isnull(b.x_project,c.x_project)
full join (
 select  ss.PROJECTCODE as x_project,
count(ts.sampleid) as TakenSample 
from  SAMPLEDETAILS ts  left join sample ss on ss.SAMPLEID=ts.SAMPLEID 
where cast((case when name = 'SampDateTaken' then value end) as date) between '13-feb-2017' and '20-feb-2017'  
 group by ss.PROJECTCODE
) t on   t.x_project=isnull(b.x_project,c.x_project)
left join PROJECT pp on pp.PROJECTCODE=c.x_project or pp.PROJECTCODE=b.x_project or pp.PROJECTCODE=a.x_project or pp.PROJECTCODE=t.x_project
group by pp.PROJECTCODE,a.GeolLenght,pp.DESCRIPTION,
b.SendSample, c.assay,TakenSample  
order by pp.DESCRIPTION

...
Рейтинг: 0 / 0
Почему происходит дублирование
    #39610456
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,

Остальные JOIN'ы тоже надо править:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Select pp.PROJECTCODE,pp.DESCRIPTION,
a.GeolLenght,
b.SendSample, c.assay, TakenSample 
From 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as GeolLenght 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) a
full join (
 select  s.PROJECTCODE as x_project,
count(sd.sampleid) as SendSample 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID 
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) b on a.x_project =b.x_project


full join
(Select projectcode as x_project, count(sss)assay from (select distinct s.sampleid as sss,PROJECTCODE 
from cORPSAMPLEASSAY c left join sample s on s.SAMPLEID= c.SAMPLEID 
where cast([LOADDATE] as date) between '2017-02-13' and '2017-03-10')abc
group by abc.PROJECTCODE)c on a.x_project=isnull(b.x_project,c.x_project)
full join (
 select  ss.PROJECTCODE as x_project,
count(ts.sampleid) as TakenSample 
from  SAMPLEDETAILS ts  left join sample ss on ss.SAMPLEID=ts.SAMPLEID 
where cast((case when name = 'SampDateTaken' then value end) as date) between '13-feb-2017' and '20-feb-2017'  
 group by ss.PROJECTCODE
) t on   t.x_project=COALESCE(a.x_project,b.x_project,c.x_project)
left join PROJECT pp on pp.PROJECTCODE=c.x_project or pp.PROJECTCODE=b.x_project or pp.PROJECTCODE=a.x_project or pp.PROJECTCODE=COALESCE(a.x_project,b.x_project,c.x_project,t.x_project)
group by pp.PROJECTCODE,a.GeolLenght,pp.DESCRIPTION,
b.SendSample, c.assay,TakenSample  
order by pp.DESCRIPTION
...
Рейтинг: 0 / 0
Почему происходит дублирование
    #39610543
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly,

почему то скрипт не позволяет использовать COALESCE в других селектах. Можео только те, которые задействованы выше. То есть в самой нижней таблице можно использовать со всеми, а в таблице с, только с a и b, в таблице b только с a. То есть только с теми, которые находятся выше в скрипте, иначе
Код: sql
1.
2.
Msg 4104, Level 16, State 1, Line 20
The multi-part identifier "t.x_project" could not be bound.
...
Рейтинг: 0 / 0
Почему происходит дублирование
    #39610581
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,
Такой ошибки быть не должно...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Select pp.PROJECTCODE,pp.DESCRIPTION,
a.GeolLenght,
b.SendSample, c.assay, TakenSample 
From 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as GeolLenght 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) a
full join (
 select  s.PROJECTCODE as x_project,
count(sd.sampleid) as SendSample 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID 
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
) b on a.x_project =b.x_project
full join
(Select projectcode as x_project, count(sss)assay from (select distinct s.sampleid as sss,PROJECTCODE 
from cORPSAMPLEASSAY c left join sample s on s.SAMPLEID= c.SAMPLEID 
where cast([LOADDATE] as date) between '2017-02-13' and '2017-03-10')abc
group by abc.PROJECTCODE)c on c.x_project=isnull(b.x_project,a.x_project)
full join (
 select  ss.PROJECTCODE as x_project,
count(ts.sampleid) as TakenSample 
from  SAMPLEDETAILS ts  left join sample ss on ss.SAMPLEID=ts.SAMPLEID 
where cast((case when name = 'SampDateTaken' then value end) as date) between '13-feb-2017' and '20-feb-2017'  
 group by ss.PROJECTCODE
) t on   t.x_project=COALESCE(a.x_project,b.x_project,c.x_project)
left join PROJECT pp on pp.PROJECTCODE=COALESCE(a.x_project,b.x_project,c.x_project,t.x_project)
--group by pp.PROJECTCODE,a.GeolLenght,pp.DESCRIPTION,b.SendSample, c.assay,TakenSample  
order by pp.DESCRIPTION

...
Рейтинг: 0 / 0
Почему происходит дублирование
    #39610599
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly, поняла, спасибо огромное
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему происходит дублирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]