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

Откуда:
Сообщений: 7
имеются запросы:
1)select
COUNT([dbo].[View_2].значение) '<1500',
datepart(hour, [dbo].[View_2].[дата расшифровки])'время'
from [dbo].[View_2]
where (([dbo].[View_2].значение<=1500)
and ([dbo].[View_2].значение >1000)
and([dbo].[View_2].[Название типа данных]='Видимость'))
group by datepart(hour, [dbo].[View_2].[дата расшифровки])
order by datepart(hour, [dbo].[View_2].[дата расшифровки])

результат

<1500| время
1| 3
1| 5
1| 8
1| 9
2| 13

2)select
COUNT([dbo].[View_2].значение) '<1000',
datepart(hour, [dbo].[View_2].[дата расшифровки])'время'
from [dbo].[View_2]
where (([dbo].[View_2].значение<=1000)
and ([dbo].[View_2].значение >800)
and([dbo].[View_2].[Название типа данных]='Видимость')
and ([dbo].[View_2].[дата расшифровки]=[dbo].[View_2].[дата расшифровки]))
group by datepart(hour, [dbo].[View_2].[дата расшифровки])
order by datepart(hour, [dbo].[View_2].[дата расшифровки])
результат:

<1000| время
1 | 1
А надо что бы получилось

<1000 | <1500 | время(часы)
1 | 0 | 0
0 | 0 | 1
0 | 0 | 2
0 | 1 | 3
0 | 0 | 4
0 | 1 | 5
0 | 0 | 6
0 | 0 | 7
0 | 1 | 8
0 | 1 | 9
0 | 0 | 10
0 | 0 | 11
0 | 0 | 12
0 | 2 | 13


и тд до 23 часов
2 июн 12, 09:39    [12654749]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
select count( case when ([dbo].[View_2].значение<=1000)
and ([dbo].[View_2].значение >800)
then [dbo].[View_2].значение else null end ) '<1000'
,
count( case when ([dbo].[View_2].значение<=1500) 
then [dbo].[View_2].значение else null end ) '<1500'
, 
datepart(hour, [dbo].[View_2].[дата расшифровки])'время'
from [dbo].[View_2]
where ([dbo].[View_2].[Название типа данных]='Видимость'))
group by datepart(hour, [dbo].[View_2].[дата расшифровки])
order by datepart(hour, [dbo].[View_2].[дата расшифровки])
2 июн 12, 10:21    [12654803]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
TEM1
Member

Откуда:
Сообщений: 7
Спс)
2 июн 12, 10:33    [12654817]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
TEM1
Member

Откуда:
Сообщений: 7
а если в таблице нет значений за определенный час запрос не будет выводить значения, а надоб что бы тоже ставил нули
2 июн 12, 10:37    [12654824]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
TEM1
а если в таблице нет значений за определенный час запрос не будет выводить значения, а надоб что бы тоже ставил нули


select isnull( t2.[<1000], 0) as '<1000'
, isnull( t2.[<1500], 0) as '<1500'
, t1.number as 'время' 
from master..spt_values t1
left join
(
select count( case when ([dbo].[View_2].значение<=1000)
and ([dbo].[View_2].значение >800)
then [dbo].[View_2].значение else null end ) '<1000'
,
count( case when ([dbo].[View_2].значение<=1500) 
then [dbo].[View_2].значение else null end ) '<1500'
, 
datepart(hour, [dbo].[View_2].[дата расшифровки])'время'
from [dbo].[View_2]
where ([dbo].[View_2].[Название типа данных]='Видимость'))
group by datepart(hour, [dbo].[View_2].[дата расшифровки])
order by datepart(hour, [dbo].[View_2].[дата расшифровки])
) t2
on t1.number = t2.[время]
where t1.type = 'P' and t1.number between 0 and 23
2 июн 12, 10:43    [12654839]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
TEM1
Member

Откуда:
Сообщений: 7
Knyazev Alexey,
from master..spt_values t1
немного не понятно, поясните плз
ругается на t2 (3 с конца строчка)
2 июн 12, 11:08    [12654896]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
TEM1
Knyazev Alexey,
from master..spt_values t1
немного не понятно, поясните плз
ругается на t2 (3 с конца строчка)

ну хоть чуть-чуть вы можете дописать самостоятельно?! нет под рукой сиквела...пишу, как в блокноте... ордер бай уберите из внутреннего запроса:

select isnull( t2.[<1000], 0) as '<1000'
, isnull( t2.[<1500], 0) as '<1500'
, t1.number as 'время' 
from master..spt_values t1
left join
(
select count( case when ([dbo].[View_2].значение<=1000)
and ([dbo].[View_2].значение >800)
then [dbo].[View_2].значение else null end ) '<1000'
,
count( case when ([dbo].[View_2].значение<=1500) 
then [dbo].[View_2].значение else null end ) '<1500'
, 
datepart(hour, [dbo].[View_2].[дата расшифровки])'время'
from [dbo].[View_2]
where ([dbo].[View_2].[Название типа данных]='Видимость')
group by datepart(hour, [dbo].[View_2].[дата расшифровки])
) t2
on t1.number = t2.[время]
where t1.type = 'P' and t1.number between 0 and 23
order by t1.number
2 июн 12, 11:50    [12654968]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
TEM1
Member

Откуда:
Сообщений: 7
Knyazev Alexey, просто в 1й раз такого рода запрос делаю

а если добавить столбцы <200 <400 <800 <3000
2 июн 12, 19:19    [12656175]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
TEM1
Member

Откуда:
Сообщений: 7
Условия соответсвенно, как у предыдущих
2 июн 12, 19:56    [12656258]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
TEM1
а если добавить столбцы <200 <400 <800 <3000


добавляйте...запрос-то уже за вас написан...просто в кейс свои условия прописывайте
2 июн 12, 23:54    [12656868]     Ответить | Цитировать Сообщить модератору
 Re: объединить запросы  [new]
TEM1
Member

Откуда:
Сообщений: 7
Knyazev Alexey, спс, не внимательно посмотрел...


select
t1.number as 'Время(ВСВ),ч',
isnull( t2.[<200] , 0) as '<200'
, isnull( t2.[<400] , 0) as '<400'
, isnull( t2.[<800] , 0) as '<800'
, isnull( t2.[<1000] , 0) as '<1000'
, isnull( t2.[<1500] , 0) as '<1500'
, isnull( t2.[<3000], 0) as '<3000'
, isnull( t2.[<8000] , 0)as '<8000'
,isnull( t2.[12] , 0) as 'Колво случаев'




from master..spt_values t1
left join
(
select


(count( case when (mtt.значение<=200)
then mtt.значение else null end))*100 '<200'

,
count( case when (mtt.значение<=400)
and (mtt.значение >200)
then mtt.значение else null end )*100 '<400'
,
count( case when (mtt.значение<=800)
and (mtt.значение >400)
then mtt.значение else null end )*100 '<800'
,
count( case when (mtt.значение<=1000)
and (mtt.значение >800)
then mtt.значение else null end )*100 '<1000'
,
count( case when (mtt.значение<=1500)
and (mtt.значение >1000)
then mtt.значение else null end )*100 '<1500'
,
count( case when (mtt.значение<=3000)
and (mtt.значение >1500)
then mtt.значение else null end )*100 '<3000'
,
count( case when (mtt.значение<=8000)
and (mtt.значение >3000)
then mtt.значение else null end )*100 '<8000'
,
(count( case when (mtt.значение<=200)
then mtt.значение else null end)
+count( case when (mtt.значение<=400)
and (mtt.значение >200)
then mtt.значение else null end )
+
count( case when (mtt.значение<=800)
and (mtt.значение >400)
then mtt.значение else null end )
+
count( case when (mtt.значение<=1000)
and (mtt.значение >800)
then mtt.значение else null end )
+
count( case when (mtt.значение<=1500)
and (mtt.значение >1000)
then mtt.значение else null end )
+
count( case when (mtt.значение<=3000)
and (mtt.значение >1500)
then mtt.значение else null end )
+
count( case when (mtt.значение<=8000)
and (mtt.значение >3000)
then mtt.значение else null end ) ) '12'
,


datepart(hour, mtt.[дата расшифровки])'время'
from
(select
dbo.Метеоданное.значение, dbo.Телеграмма.[дата расшифровки], dbo.[Тип данных].[Название типа данных]
FROM dbo.Метеоданное INNER JOIN
dbo.Телеграмма ON dbo.Метеоданное.[id телеграммы] = dbo.Телеграмма.[id телеграммы] INNER JOIN
dbo.[Тип данных] ON dbo.Метеоданное.[id типа данных] = dbo.[Тип данных].[id типа данных]
Where dbo.[Тип данных].[Название типа данных]='Видимость') as mtt


where
(mtt.[Название типа данных]='Видимость')
and(CAST(mtt.[дата расшифровки] as DATE)>='2012-01-01')
and(CAST(mtt.[дата расшифровки] as DATE)<='2012-06-06')
group by datepart(hour, mtt.[дата расшифровки])
) as t2

on t1.number = t2.[время]
where t1.type = 'P' and t1.number between 0 and 23

order by t1.number

-----------------------------------------------
сумму последнего столбца(кол-во случаев)?затем каждую ячейку столбцов(<200<400<800<1000<1500<3000<8000) разделить на эту сумму
4 июн 12, 09:28    [12659837]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить