powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите составить запрос
4 сообщений из 4, страница 1 из 1
Помогите составить запрос
    #35402096
haceduru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем,

у меня имеется таблица вида:
Код: plaintext
1.
2.
3.
4.
ArchiveIID int
IndicationID int
DateAndTime datetime
Val real

в данной таблице хранятся показания, снятые с различных датчиков
ArchiveIID это первичный ключ
IndicationID может принимать целые значения 10,11,12,13, 20,21,22,23, 30,31,32,33 определяет тип показания
DateAndTime это дата и время снятия показания
Val это значение показания

При чем показания всевозможных типов снимаются одновременно , то есть в клиентском приложении при нажатии кнопки "снять и сохранить показания" происходит выполнение хранимой процедуры, записывающей все показания в базу данных.

Моя задача - составить запрос, отображающий дату и время снятия показаний первым столбцом. Во втором столбце должны отображаться значения Val для соответствующей даты и с IndicationID=10, в третьем столбце должны отображаться значения Val для соответствующей даты и с IndicationID=20, ну а в четвертом столбце =) должны отображаться значения Val для соответствующей даты и с IndicationID=30

я конечно составил запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
DateAndTime AS [Дата и время],
CASE IndicationID WHEN  10  THEN Val ELSE  0  END AS [ 10 ],
CASE IndicationID WHEN  20  THEN Val ELSE  0  END AS [ 20 ],
CASE IndicationID WHEN  30  THEN Val ELSE  0  END AS [ 30 ]

FROM CountersIndicationsArchive AS ca 

WHERE (IndicationID= 10  OR IndicationID= 20  OR IndicationID= 30 )

но в результате получается:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 30 . 06 . 2008   14 : 25 : 17       1       0       0 
 30 . 06 . 2008   14 : 25 : 17       0       1       0 
 30 . 06 . 2008   14 : 25 : 17       0       0       1 
 30 . 06 . 2008   13 : 25 : 17       2       0       0 
 30 . 06 . 2008   13 : 25 : 17       0       2       0 
 30 . 06 . 2008   13 : 25 : 17       0       0       2 
 30 . 06 . 2008   12 : 25 : 17       3       0       0 
 30 . 06 . 2008   12 : 25 : 17       0       3       0 
 30 . 06 . 2008   12 : 25 : 17       0       0       3 

и так для каждой даты, а хотелось бы:

Код: plaintext
1.
2.
 30 . 06 . 2008   14 : 25 : 17       1       1       1 
 30 . 06 . 2008   13 : 25 : 17       2       2       2 
 30 . 06 . 2008   12 : 25 : 17       3       3       3 

то есть чтобы на каждое время снятия показаний приходилась только одна запись, как такое сделать?
...
Рейтинг: 0 / 0
Помогите составить запрос
    #35402194
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Группируйте по дате и используйте функцию max(если все значения положительны).
то есть примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
DateAndTime AS [Дата и время],
max(CASE IndicationID WHEN  10  THEN Val ELSE  0  END) AS [ 10 ],
max(CASE IndicationID WHEN  20  THEN Val ELSE  0  END) AS [ 20 ],
max(CASE IndicationID WHEN  30  THEN Val ELSE  0  END) AS [ 30 ]

FROM CountersIndicationsArchive AS ca 

WHERE (IndicationID= 10  OR IndicationID= 20  OR IndicationID= 30 )
GROUP BY  DateAndTime


P.S. Тема не для этого форума, конечно.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #35405081
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
SELECT ca10.DateAndTime, ca10.Val, ca20.Val, ca30.Val
FROM CountersIndicationsArchive AS ca10
INNER JOIN CountersIndicationsArchive AS ca20 ON (ca10.DateAndTime=ca20.DateAndTime)
INNER JOIN CountersIndicationsArchive AS ca30 ON (ca10.DateAndTime=ca30.DateAndTime)
WHERE (ca10.IndicationID= 10 ) AND (ca20.IndicationID= 20 ) AND (ca30.IndicationID= 30 )

С уважением, Naf
...
Рейтинг: 0 / 0
Помогите составить запрос
    #35405910
haceduru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите составить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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