avshap: (Default)
avshap ([personal profile] avshap) wrote2006-08-07 03:06 pm

Продолжение проблем с SQL

Табличка примерно такого вида:
 PriTis   | 7        | Russia  Proper and cell         |    0.038
 IPStudio | 7        | Russia  Proper and cell         |    0.039
 InAr     | 7011     | КАЛИНИГРАДСКАЯ ОБЛАСТЬ          |    0.042
 InAr     | 70112    | КАЛИНИГРАД                      |    0.021
 PriTis   | 70112    | КАЛИНИГРАД                      |    0.019


Хочется сделать из неё что-либо вроде этого:
      |                         | PriTis | IPStudio | InAr  |
7     | Russia  Proper and cell | 0.038  | 0.039    |       |
7011  | КАЛИНИГРАДСКАЯ ОБЛАСТЬ  |        |          | 0.042 |
70112 | КАЛИНИГРАД              | 0.019  |          | 0.021 |

В принципе, это можно сделать со стороны клиента, но на стороне сервера как-нибудь эту работу можно облегчить?

UPD: Вопрос снят, мне напомнили про CASE.

[identity profile] ping-ving.livejournal.com 2006-08-07 09:34 am (UTC)(link)
Нихрена не пойму.
Кто из них направление, кто - префикс, а кто-оператор?

[identity profile] avshap.livejournal.com 2006-08-07 09:36 am (UTC)(link)
В первой табличке столбцы "Оператор", "Префикс", "Направление", "Тариф".

Пока, для преобразования ко второму виду, не придумал ничего лучше кроме создания нового представления.

первая итерация.

[identity profile] ping-ving.livejournal.com 2006-08-07 09:41 am (UTC)(link)
Вынести столбцы с префиксом и направлением в отдельный справочник.
Т.е. третий столбец из первой таблицы пропадает.
Второй таблицы тебе на самом деле не надо - если ты хочешь с ней работать, а не только сформировать для печати портянки.

Убегаю.
Если что - отвечу завтра.

Re: первая итерация.

[identity profile] avshap.livejournal.com 2006-08-07 09:44 am (UTC)(link)
Оно мне как-раз и для портянки нужно.

Вдогонку

[identity profile] avshap.livejournal.com 2006-08-07 09:46 am (UTC)(link)
Там как-раз и разбито по табличкам "операторы" (данные об операторах), "направления" (телефонные коды и наименования) и "тарифы". Первая таблица это кусок результата поиска тарифов по российским направлениям.

[identity profile] alex-mashin.livejournal.com 2006-08-07 09:48 am (UTC)(link)
Чем дальше, тем извращённее. В MS Access есть такая вещь -- Crosstab Query. А в нормальном SQL это можно сделать, если только все возможные значения первого столбца известны заранее.
Вот так, например:
(CASE Column1 WHEN N'PriTis' THEN Column5 ELSE 0 END) AS PriTis

[identity profile] avshap.livejournal.com 2006-08-07 10:00 am (UTC)(link)
О! Как раз оно и подходит, потому как названия операторов гарантировано известны. Как же я про CASE забыл?