Помогите с запросом в MS SQL :)
4055
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 в запросе, то можно через внутренние объединения к одной и той же таблице - но это громоздко получится
Сейчас читают
работа для наркомана
16079
125
Хочу видеть сына во сне!
15372
62
за что такие деньжищщи?
15176
74
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ой.