powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объеденить два запроса
19 сообщений из 19, страница 1 из 1
Объеденить два запроса
    #39605220
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снова я... Какая-то у меня нелепая ситуация. Есть два запроса, которые по отдельности работают прекрасно, но когда я пытаюсь слить их в одну таблицу, то выдают неверные числа.
Запрос 1
Код: sql
1.
2.
3.
4.
5.
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as s 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE




Запрос 2
Код: sql
1.
2.
3.
4.
5.
 select  s.PROJECTCODE as x_project,
count(sd.sampleid) as sss 
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



Снизу представлена информация, которую они выдают по отдельности и та, которая должна быть, находясь в одном запросе. Пробовала разные методы и подзапросы и два селекта объединить - выдает какую-то фигню, цифры не совпадают, как я их только не объединяла... цифры выдает вообще космические
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605223
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
katish444,
если пишу вот так, то пропадают некоторые проекты, может не то соединение?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
   select  s.PROJECTCODE as x_project,sam.s,
count(sd.sampleid) as sss 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID left join ( select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as s 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE)sam on sam.x_project=s.PROJECTCODE
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE,sam.s
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605231
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,
Выбирай соединения (... Join) в зависимости от полноты данных.
В данном случае данных во втором запросе больше - нужно собирать к нему.
В твоем коде второй запрос "справа" соответственно используй Right Join.
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605232
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select  s.PROJECTCODE as x_project,sam.s,
count(sd.sampleid) as sss 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO right join sample s on s.SAMPLEID=sd.SAMPLEID left join ( select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as s 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE)sam on sam.x_project=s.PROJECTCODE
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE,sam.s
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605233
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopellykatish444,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select  s.PROJECTCODE as x_project,sam.s,
count(sd.sampleid) as sss 
from  SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO right join sample s on s.SAMPLEID=sd.SAMPLEID left join ( select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as s 
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE)sam on sam.x_project=s.PROJECTCODE
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE,sam.s


Это для конкретного случая? А если у меня в следующий раз будет наоборот - в другой таблице много проектов, а в этой мало?
Когда использую фулл или иннер джойн ничего не меняется
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605234
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopelly, опять спешишь

select s.PROJECTCODE as x_project,sam.s,
count(sd.sampleid) as sss
from SAMPLEDESPATCH sd left join DESPATCHSEND ds on sd.DESPATCHNO=ds.DESPATCHNO left join sample s on s.SAMPLEID=sd.SAMPLEID >>>right<<< join ( select dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as s
from drillingdetail dd
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
group by PROJECTCODE)sam on sam.x_project=s.PROJECTCODE
where cast([senddate] as date) between '13-feb-2017' and '20-feb-2017'
group by PROJECTCODE,sam.s
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605236
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly,

Это для конкретного случая? А если у меня в следующий раз будет наоборот - в другой таблице много проектов, а в этой мало?
Когда использую фулл или иннер джойн ничего не меняется
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605239
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444Это для конкретного случая? А если у меня в следующий раз будет наоборот - в другой таблице много проектов, а в этой мало?
Когда использую фулл или иннер джойн ничего не меняется

Если может быть больше данных в разных местах - Full Join:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Select isnull(a.x_project,b.x_project),
a.s,
b.sss 
From 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as s 
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 sss 
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
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605275
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а заюзать union не?
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605301
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly,
спасибо. То, что надо, а я не правильно использовала фул джоин
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605321
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewiczа заюзать union не?
Можно и через Union, но Full join, по-моему, правильнее:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Select x_project
sum(s) as s,
sum(sss) as sss
From 
(
 select  dd.PROJECTCODE as x_project,
sum(cast((case when name = 'totaldrilldepth' then value end) as float)) as s,
cast(null as int) as sss
from drillingdetail dd 
where cast([DRILLINGDATE] as date) between '13-feb-2017' and '20-feb-2017'
 group by PROJECTCODE
union all
 select  s.PROJECTCODE as x_project,
null,
count(sd.sampleid) as sss 
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
) a
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605323
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл
Код: sql
1.
Group by x_project
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605368
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KopellyЗабыл
Код: sql
1.
Group by 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.
 Select isnull(a.x_project,b.x_project)p,
a.GeolLenght,
b.SendSample, c.assay 
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, 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.PROJECTCODE
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605393
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444, я думаю в предыдущем случае стоило бы разобраться почему запрос начинается с
Код: sql
1.
 Select isnull(a.x_project,b.x_project)p,


Вот зачем там isnull написан?
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605399
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.Fontaine, чтобы они в один столбец записались и не дублировались
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605408
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.Fontainekatish444, я думаю в предыдущем случае стоило бы разобраться почему запрос начинается с
Код: sql
1.
 Select isnull(a.x_project,b.x_project)p,


Вот зачем там isnull написан?

без isnull получается так
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605413
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katish444,
Замени Isnull() на COALESCE(a.x_project,b.x_project,c.x_project)
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605443
katish444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopellykatish444,
Замени Isnull() на COALESCE(a.x_project,b.x_project,c.x_project)
спасибо, я уже нашла выход через Ж... соединила все три путем дополнительной таблицы)))
...
Рейтинг: 0 / 0
Объеденить два запроса
    #39605762
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, запрос с UNPIVOT нагляднее получается
Осторожно! Внутри жесткий хардкор 27+
Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
WITH
s AS (
  SELECT
    [project] = 'KE',
    [value] = 342.5
  UNION ALL
  SELECT
    [project] = 'MA',
    [value] = 165.5
  UNION ALL
  SELECT
    [project] = 'VA',
    [value] = 330.0
),
sss AS (
  SELECT
    [project] = 'KE',
    [value] = 237.0
  UNION ALL
  SELECT
    [project] = 'MA',
    [value] = 268.0
),
xxx AS (
  SELECT
    [project] = 'KE',
    [value] = 369.0
  UNION ALL
  SELECT
    [project] = 'VA',
    [value] = 473.0
),
tbl AS (
  SELECT
    [project],
    [type] = 's',
    [value]
  FROM
    s
  UNION ALL
  SELECT
    [project],
    [type] = 'sss',
    [value]
  FROM
    sss
  UNION ALL
  SELECT
    [project],
    [type] = 'xxx',
    [value]
  FROM
    xxx
)
SELECT
  *
FROM
  tbl
  PIVOT (
    MAX( [value] ) FOR [type] IN ( [s], [sss], [xxx] )
  ) pvt


...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объеденить два запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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