Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объединение в одну таблицу N запросов  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
День добрый!
Есть скрипт

SET DATEFORMAT DMY
DECLARE @YesterdayBegin DATETIME;
DECLARE @YesterdayEnd DATETIME;

SET @YesterdayBegin=CAST(CONVERT(CHAR(20),GETDATE()-1,112)+'00:00:00.000' AS DATETIME)
SET @YesterdayEnd=CAST(CONVERT(CHAR(20),GETDATE()-1,112)+'23:59:59.997' AS DATETIME)
--SELECT @YesterdayBegin
--SELECT @YesterdayEnd

--выводим P21 где ID_OBJ=13
SELECT dtMod, P21 FROM [oik].[dbo].[Archiv_1M] 
WHERE dtMod>=@YesterdayBegin AND dtMod<=@YesterdayEnd 
AND CONVERT(CHAR(20), dtMod,108) LIKE '%00:00' AND ID_OBJ=13 

--выводим P19 где ID_OBJ=7
SELECT dtMod, P19 FROM [oik].[dbo].[Archiv_1M] 
WHERE dtMod>=@YesterdayBegin AND dtMod<=@YesterdayEnd 
AND CONVERT(CHAR(20), dtMod,108) LIKE '%00:00' AND ID_OBJ=7

--выводим P29 где ID_OBJ=9
SELECT dtMod, P29 FROM [oik].[dbo].[Archiv_1M] 
WHERE dtMod>=@YesterdayBegin AND dtMod<=@YesterdayEnd 
AND CONVERT(CHAR(20), dtMod,108) LIKE '%00:00' AND ID_OBJ=9

который выводит результат в виде
--выводим dtMod, P21 где ID_OBJ=13

2013-01-10 00:00:00.000 737849975585938
2013-01-10 01:00:00.000 737324951171875
2013-01-10 02:00:00.000 737025024414063
2013-01-10 03:00:00.000 7365

--выводим dtMod, P19 где ID_OBJ=7

2013-01-10 00:00:00.000 -121999988555908
2013-01-10 01:00:00.000 -121999988555908
2013-01-10 02:00:00.000 -121999988555908
2013-01-10 03:00:00.000 -127999982833862

--выводим dtMod, P29 где ID_OBJ=9

2013-01-10 00:00:00.000 -859999847412109
2013-01-10 01:00:00.000 -799999809265137
2013-01-10 02:00:00.000 -859999847412109
2013-01-10 03:00:00.000 -799999809265137

А я хочу, с вашей помощью, написать скрипт который выводит результат в таком виде
2013-01-10 00:00:00.000 737849975585938 -121999988555908 -859999847412109
2013-01-10 01:00:00.000 737324951171875 -121999988555908 -799999809265137
2013-01-10 02:00:00.000 737025024414063 -121999988555908 -859999847412109
2013-01-10 03:00:00.000 7365 -127999982833862 -799999809265137

благодарю за помощь
11 янв 13, 17:46    [13755863]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
aleks2
Guest
А чо за хрень в конце дат?
2013-01-10 00:00:00.000 737
11 янв 13, 18:00    [13755960]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
aleks2,
очепятка
11 янв 13, 18:02    [13755969]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
Гость333
Member

Откуда:
Сообщений: 3683
aleks2,

Видимо, это данные плохо отформатировались. Как я понимаю, должно выглядеть так:
2013-01-10 00:00:00.000	737,849975585938
2013-01-10 01:00:00.000 737,324951171875
2013-01-10 02:00:00.000 737,025024414063
2013-01-10 03:00:00.000 736,5
11 янв 13, 18:03    [13755976]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
aleks2
Guest
;with
P21 as (
--выводим P21 где ID_OBJ=13
SELECT dtMod, P21 FROM [oik].[dbo].[Archiv_1M] 
WHERE dtMod>=@YesterdayBegin AND dtMod<=@YesterdayEnd 
AND CONVERT(CHAR(20), dtMod,108) LIKE '%00:00' AND ID_OBJ=13 
)
,
P19 as (
--выводим P19 где ID_OBJ=7
SELECT dtMod, P19 FROM [oik].[dbo].[Archiv_1M] 
WHERE dtMod>=@YesterdayBegin AND dtMod<=@YesterdayEnd 
AND CONVERT(CHAR(20), dtMod,108) LIKE '%00:00' AND ID_OBJ=7
)
P29 as (
--выводим P29 где ID_OBJ=9
SELECT dtMod, P29 FROM [oik].[dbo].[Archiv_1M] 
WHERE dtMod>=@YesterdayBegin AND dtMod<=@YesterdayEnd 
AND CONVERT(CHAR(20), dtMod,108) LIKE '%00:00' AND ID_OBJ=9
)
select P21.dtMod, P21, P19, P29
from P21 
     inner join 
     P19 on P21.dtMod=P19.dtMod
     inner join 
     P29 on P21.dtMod=P29.dtMod
11 янв 13, 18:06    [13756001]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
что-ли
Guest
так просто по дате что-ли соединить?
ну, оформить как подзапросы или как CTE и join по дате
11 янв 13, 18:07    [13756007]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Только для надежности лучше full join
11 янв 13, 18:10    [13756029]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
Strangers
Member [заблокирован]

Откуда: Україна
Сообщений: 2613
;WITH asd as     
(SELECT dtMod, ID_OBJ, P21, P19, P29
FROM [oik].[dbo].[Archiv_1M] 
WHERE dtMod>=@YesterdayBegin AND dtMod<=@YesterdayEnd 
AND CONVERT(CHAR(20), dtMod,108) LIKE '%00:00' AND ID_OBJ in (13,7,9))
SELECT dtMod,
	(SELECT top 1 P21 FROM asd WHERE ID_OBJ = 13 and dtMod = a.dtMod) as P21,
	(SELECT top 1 P19 FROM asd WHERE ID_OBJ = 7 and dtMod = a.dtMod) as P19,
	(SELECT top 1 P29 FROM asd WHERE ID_OBJ = 9 and dtMod = a.dtMod) as P29
FROM asd a
Group BY dtMod
11 янв 13, 19:38    [13756450]     Ответить | Цитировать Сообщить модератору
 Re: Объединение в одну таблицу N запросов  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
85sergu,

3 раза использовать одну таблицу... join... можно конечно. но это тройной скан/сик... Эффективнее будет pivot в эту сторону посмотрите, если есть претензии к производительности запроса этого.
12 янв 13, 22:27    [13760732]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить