На информационном ресурсе применяются cookie-файлы. Оставаясь на сайте, вы подтверждаете свое согласие на их использование.
Помогите с запросом в MS SQL :)
4248
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 в запросе, то можно через внутренние объединения к одной и той же таблице - но это громоздко получится
Сейчас читают
Психологи не помогают. Что дальше?
53532
197
Не понимаю, что со мной не так?
85456
288
навеяло) Про ЗППП, прошу не сносить) важна публика)
9634
25
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,

From
(Select date, id
from Table) as H
Pivot
(count(id)
for id in (

) as Pvt
Sadovnikov
v.i.p.
А форум вот так:
подсказывает, что не надо так делать...
P.S. Я к тому, что не у всех 2005-й скуль


P.S. Я к тому, что не у всех 2005-й скуль

zeus
veteran
А форум вот так:конечно, у некоторых уже 2008ой.подсказывает, что не надо так делать...
P.S. Я к тому, что не у всех 2005-й скуль
![]()
