Size: a a a

2021 June 03

AK

Andrey Karepin in use Perl or die;
работает что ли?
источник

PV

Pingvin Valentin in use Perl or die;
Ну не совсем в таком виде, но таки да)
источник

VG

Vadim Goncharov in use Perl or die;
вот всегда меня sql несколько удивлял полюблением разных извратов...
источник

AK

Andrey Karepin in use Perl or die;
всё строго в рамках декларативной парадигмы
источник

PV

Pingvin Valentin in use Perl or die;
assql так сказать
источник

VG

Vadim Goncharov in use Perl or die;
ну там вот эти всякие приколы типа джойна таблицы саму с собой
источник

AK

Andrey Karepin in use Perl or die;
так тебе ещё null-ы схлопнуть надо
источник

AK

Andrey Karepin in use Perl or die;
это из-за недостатока проектирования и слабой нормализации
источник

PV

Pingvin Valentin in use Perl or die;
не факт что надо) но было бы не плохо знать как это делать
источник

AK

Andrey Karepin in use Perl or die;
group by -ем
источник

VG

Vadim Goncharov in use Perl or die;
да не, это способ решения задачек в норме у них как раз
источник

AK

Andrey Karepin in use Perl or die;
там ещё древовидные структуры без самосоединения не реализуешь
источник

AK

Andrey Karepin in use Perl or die;
хотя из определения таблиц это очевидно
источник

VG

Vadim Goncharov in use Perl or die;
ну деревья ладно еще
источник

PV

Pingvin Valentin in use Perl or die;
Я чёт не осознаю куда там group by вкорячить, что бы схлопнуть нулы
источник

PV

Pingvin Valentin in use Perl or die;
CREATE TABLE data_table(id SERIAL, title TEXT, attribute TEXT);
INSERT INTO data_table(title, attribute) VALUES('titleA','att1');
INSERT INTO data_table(title, attribute) VALUES('titleA','att2');
INSERT INTO data_table(title, attribute) VALUES('titleA','att3');
INSERT INTO data_table(title, attribute) VALUES('titleA','att4');
INSERT INTO data_table(title, attribute) VALUES('titleB','att1');
INSERT INTO data_table(title, attribute) VALUES('titleB','att2');
INSERT INTO data_table(title, attribute) VALUES('titleB','att3');
INSERT INTO data_table(title, attribute) VALUES('titleB','att4');

SELECT titleA, titleB FROM (
 SELECT
     CASE WHEN title = 'titleA' THEN attribute ELSE NULL END AS titleA,
     CASE WHEN title = 'titleB' THEN attribute ELSE NULL END AS titleB
     FROM data_table
) AS result;
источник

PV

Pingvin Valentin in use Perl or die;
Что так, что этак - 8 строк в результате
источник

АГ

Алексей Галаев... in use Perl or die;
Так ведь во всех строках только одно нулл поле. Вот если бы был ещё titleC, тогда было бы 2 null значения в строке. Но тогда можно было бы добавить в верхний select секцию where для того, чтобы исключить оба нулевых.
Как вариант, выводить всё в рамках одного поля, а не двух. Или тут надо именно транспонировать таблицу?
источник

AK

Andrey Karepin in use Perl or die;
WITH src AS (
SELECT 'title A' AS TitleName, 0.0 AS TitleValue
UNION ALL
SELECT 'title B' AS TitleName, 0.0 AS TitleValue
UNION ALL
SELECT 'title A' AS TitleName, 1.0 AS TitleValue
UNION ALL
SELECT 'title B' AS TitleName, 1.0 AS TitleValue
UNION ALL
SELECT 'title A' AS TitleName, 10.0 AS TitleValue
UNION ALL
SELECT 'title B' AS TitleName, 10.0 AS TitleValue
UNION ALL
SELECT 'title A' AS TitleName, 15.0 AS TitleValue
UNION ALL
SELECT 'title B' AS TitleName, 15.0 AS TitleValue
)

SELECT max(titleA) AS titleA, max(titleB) AS titleB
 FROM (
   SELECT CASE WHEN TitleName = 'title A' THEN TitleValue ELSE null END AS titleA,
          CASE WHEN TitleName = 'title B' THEN TitleValue ELSE null END AS titleB,
          ROW_NUMBER() over() AS r_num
     FROM src) AS pivot
 GROUP BY r_num + r_num % 2;
источник

PV

Pingvin Valentin in use Perl or die;
Ну это ведь пример, в реальной таблице много полей будет. Более 10 точно.
источник