2°C
завтра: 2°C
Погода в Перми
2°C
ночью−5°C
утром−1°C
завтра2°C
Подробно
 92,26
−0.3291
Курс USD ЦБ РФна 29 марта
92,2628
−0.3291
 99,71
−0.5647
Курс EUR ЦБ РФна 29 марта
99,7057
−0.5647
  • С 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 встречался в эту дату.

  • select Date_id, ID, sum(ID) from table
    group by ID, Date_id
    как-то так

    Осторожнее с травой!
    Если хапнешь много дряни
    Увезут тебя с собой
    Злые инопланетяне

  • имхо Вы не только с sql не дружите
    У Вас
    1)исходные данные в цифрах
    В ответ на: 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
    2)пример результат в цифрах,
    В ответ на: Date Кол-во ID1 Кол-во ID2 Кол-во ID3
    13.11.09 1 1 3
    14.11.09 1 1 0
    3)словесное описаниене
    В ответ на: Т.е. сколько тот или иной ID встречался в эту дату.
    не согласуются между собой ни в каких сочетаниях
    мыслимых сочетаниях

  • В ответ на: select Date_id, ID, sum(ID) from table
    group by ID, Date_id
    Пипец... К плохим програмистам точно на новый год приходит не Дед Мороз, а Дид Лок...
    Просто очень познавательна конструкция sum(ID) в свете group by ID.
    Нафига так позориться-то??

  • блин, сорри
    count(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

  • не, в таком виде средствами SQL в общем случае не решаемо - потому что количество полей запроса заранее неизвестно
    Хотя если ты знаешь максимальный ID в запросе, то можно через внутренние объединения к одной и той же таблице - но это громоздко получится

    Осторожнее с травой!
    Если хапнешь много дряни
    Увезут тебя с собой
    Злые инопланетяне

  • Количество ID заранее известно?

  • В ответ на: Количество ID заранее известно?
    ид можно посчитать и курсором в строку, а потом:
    Select date, strID
    From
    (Select date, id
    from Table) as H
    Pivot
    (count(id)
    for id in (srtID)
    ) as Pvt

    Be too clever by three quarters.

  • 1. "курсором в строку" - и рискуем нарваться на ограничения, например, по длине тектста запроса, если этих ID вдруг окажется слишком много.
    2. "Pivot" - а если у автора 2000-ный скуль? :миг:

  • Известно 3 штуки

  • Тогда, например, так:

    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, :1:,[2],[3]
    From
    (Select date, id
    from Table) as H
    Pivot
    (count(id)
    for id in ( :1:,[2],[3])
    ) as Pvt

    Be too clever by three quarters.

  • А форум вот так: :1: подсказывает, что не надо так делать...:улыб:
    P.S. Я к тому, что не у всех 2005-й скуль:улыб:

  • В ответ на: А форум вот так: :1: подсказывает, что не надо так делать...:улыб:P.S. Я к тому, что не у всех 2005-й скуль:улыб:
    конечно, у некоторых уже 2008ой. :улыб:

    Be too clever by three quarters.

Записей на странице:

Перейти в форум

Модератор: