Помогите с запросом в MS SQL :)
4054
14
С sql не очень сильно дружу
Есть такая выборка:
Date ID
13.11.09 3
13.11.09 1
14.11.09 1
13.11.09 3
13.11.09 2
14.11.09 2
13.11.09 3
Как из такой выборки получить такую:
Date Кол-во ID1 Кол-во ID2 Кол-во ID3
13.11.09 1 1 3
14.11.09 1 1 0
Т.е. сколько тот или иной ID встречался в эту дату.
Есть такая выборка:
Date ID
13.11.09 3
13.11.09 1
14.11.09 1
13.11.09 3
13.11.09 2
14.11.09 2
13.11.09 3
Как из такой выборки получить такую:
Date Кол-во ID1 Кол-во ID2 Кол-во ID3
13.11.09 1 1 3
14.11.09 1 1 0
Т.е. сколько тот или иной ID встречался в эту дату.
select Date_id, ID, sum(ID) from table
group by ID, Date_id
как-то так
group by ID, Date_id
как-то так
имхо Вы не только с sql не дружите
У Вас
1)исходные данные в цифрах
мыслимых сочетаниях
У Вас
1)исходные данные в цифрах
Date ID2)пример результат в цифрах,
13.11.09 3
13.11.09 1
14.11.09 1
13.11.09 3
13.11.09 2
14.11.09 2
13.11.09 3
Date Кол-во ID1 Кол-во ID2 Кол-во ID33)словесное описаниене
13.11.09 1 1 3
14.11.09 1 1 0
Т.е. сколько тот или иной ID встречался в эту дату.не согласуются между собой ни в каких сочетаниях
мыслимых сочетаниях
Sadovnikov
v.i.p.
select Date_id, ID, sum(ID) from tableПипец... К плохим програмистам точно на новый год приходит не Дед Мороз, а Дид Лок...
group by ID, Date_id
Просто очень познавательна конструкция sum(ID) в свете group by ID.
Нафига так позориться-то??
Спасибо за помощьПолучился вывод:
Date ID COUNT(ID)
15.11.09 2 3
16.11.09 1 3
16.11.09 3 3
Т.е. выбрались записи с ID равным 1,2,3
А мне бы хотелось чтобы вывод выглядел так:
Date ID == 1 ID == 2 ID == 3
15.11.09 0 3 0
16.11.09 3 0 3
Т.е. напрмер 15-го числа было 0 ID равных 1, 3 ID равных 2 и 0 ID равных 3
Date ID COUNT(ID)
15.11.09 2 3
16.11.09 1 3
16.11.09 3 3
Т.е. выбрались записи с ID равным 1,2,3
А мне бы хотелось чтобы вывод выглядел так:
Date ID == 1 ID == 2 ID == 3
15.11.09 0 3 0
16.11.09 3 0 3
Т.е. напрмер 15-го числа было 0 ID равных 1, 3 ID равных 2 и 0 ID равных 3
не, в таком виде средствами SQL в общем случае не решаемо - потому что количество полей запроса заранее неизвестно
Хотя если ты знаешь максимальный ID в запросе, то можно через внутренние объединения к одной и той же таблице - но это громоздко получится
Хотя если ты знаешь максимальный ID в запросе, то можно через внутренние объединения к одной и той же таблице - но это громоздко получится
Сейчас читают
за что такие деньжищщи?
15173
74
Платяной шкаф. Прочтение правил - ОБЯЗАТЕЛЬНО (часть 21)
304152
1000
Смерть в Пасху
5753
17
zeus
veteran
Количество ID заранее известно?ид можно посчитать и курсором в строку, а потом:
Select date, strID
From
(Select date, id
from Table) as H
Pivot
(count(id)
for id in (srtID)
) as Pvt
Sadovnikov
v.i.p.
1. "курсором в строку" - и рискуем нарваться на ограничения, например, по длине тектста запроса, если этих ID вдруг окажется слишком много.
2. "Pivot" - а если у автора 2000-ный скуль?
2. "Pivot" - а если у автора 2000-ный скуль?
Sadovnikov
v.i.p.
Тогда, например, так:
Create Table Z (_Date DateTime, ID Int)
Insert Into Z Values('20010101', 1)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 3)
Insert Into Z Values('20020101', 1)
Insert Into Z Values('20020101', 3)
Insert Into Z Values('20030101', 1)
Insert Into Z Values('20030101', 2)
Insert Into Z Values('20030101', 3)
Insert Into Z Values('20040101', 3)
Insert Into Z Values('20050101', 3)
Select
_Date, SUM(ID_1) ID_1, SUM(ID_2) ID_2, SUM(ID_3) ID_3
From
(
Select
_Date,
(CASE When ID = 1 Then 1 Else 0 End) ID_1,
(CASE When ID = 2 Then 1 Else 0 End) ID_2,
(CASE When ID = 3 Then 1 Else 0 End) ID_3
From Z
) Z
Group By _Date
Drop Table Z
Create Table Z (_Date DateTime, ID Int)
Insert Into Z Values('20010101', 1)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 2)
Insert Into Z Values('20010101', 3)
Insert Into Z Values('20020101', 1)
Insert Into Z Values('20020101', 3)
Insert Into Z Values('20030101', 1)
Insert Into Z Values('20030101', 2)
Insert Into Z Values('20030101', 3)
Insert Into Z Values('20040101', 3)
Insert Into Z Values('20050101', 3)
Select
_Date, SUM(ID_1) ID_1, SUM(ID_2) ID_2, SUM(ID_3) ID_3
From
(
Select
_Date,
(CASE When ID = 1 Then 1 Else 0 End) ID_1,
(CASE When ID = 2 Then 1 Else 0 End) ID_2,
(CASE When ID = 3 Then 1 Else 0 End) ID_3
From Z
) Z
Group By _Date
Drop Table Z
Известно 3 штукину а если 2005ый то можно так.
Pivot альтернатива case из-за которого запрос выглядит слишком запутанным.
Select date, ,[2],[3]
From
(Select date, id
from Table) as H
Pivot
(count(id)
for id in ( ,[2],[3])
) as Pvt
Sadovnikov
v.i.p.
А форум вот так: подсказывает, что не надо так делать...
P.S. Я к тому, что не у всех 2005-й скуль
P.S. Я к тому, что не у всех 2005-й скуль
zeus
veteran
А форум вот так: подсказывает, что не надо так делать...P.S. Я к тому, что не у всех 2005-й скульконечно, у некоторых уже 2008ой.