2017-02-22 8 views
2

Можно ли использовать оператор case в функции «кросс-таблицы»? Это то, что я собрал до сих пор.Использование оператора case в функции кросс-таблицы

SELECT * FROM crosstab('select distinct test_id, cluster,total_points_earned FROM pmt_cluster') 
case when test_id = 451 end AS Algebra( 
     "School___Teacher" text, 
    "Analyze functions using different representations" text, 
    "Construct and compare linear, quadratic, and exponential models and solve problems" text, 
    "Create equations that describe numbers or relationships" text, 
    "Expressions and Equations" text) 
case when test_id = 454 end AS Ela( 
    "School___Teacher" text, 
    "Key Ideas and Details" text, 
    "Conventions of Standard English" text, 
    "Craft and Structure" text, 
    "Vocabulary Acquisition and Use" text) 

ответ

0

Если я правильно понял, вам нужно это, чтобы позвонить ему из psql. Поскольку создание любых ожидаемых операторов SQL на любых внешних языках не представляет проблемы.

Для этого вы можете использовать команду \ gset. Он отправляет текущий буфер ввода запроса на сервер и сохраняет вывод запроса в переменной psql. (https://www.postgresql.org/docs/current/static/app-psql.html)

SELECT 451 AS test_id; 
\gset 


SELECT CASE WHEN :test_id = 451 THEN 'Algebra' WHEN :test_id = 454 THEN 'Ela' END AS ttype, 
     '"School___Teacher"' AS f1, 'text' AS t1, 
     'text' AS tX, 
     CASE WHEN :test_id = 451 THEN '"Analyze functions using different representations"' WHEN :test_id = 454 THEN '"Key Ideas and Details"' END AS f2, 
     CASE WHEN :test_id = 451 THEN '"Construct and compare linear, quadratic, and exponential models and solve problems"' WHEN :test_id = 454 THEN '"Conventions of Standard English"' END AS f3, 
     CASE WHEN :test_id = 451 THEN '"Create equations that describe numbers or relationships"' WHEN :test_id = 454 THEN '"Craft and Structure"' END AS f4, 
     CASE WHEN :test_id = 451 THEN '"Expressions and Equations"' WHEN :test_id = 454 THEN '"Vocabulary Acquisition and Use"' END AS f5; 
\gset 

SELECT * 
     FROM crosstab('select distinct test_id, cluster,total_points_earned FROM pmt_cluster') 
     AS :ttype(:f1 :t1, :f2 :tX, :f3 :tX, :f4 :tX, :f5 :tX); 
; 
+0

Ошибка при получении: Ошибка: у вас нет разрешения на запуск запросов GSET. Я думаю, что это сработает, если я смогу пройти эту ошибку разрешения. – Joe

+0

Эта ошибка для первого gset или секунды? –

+0

это для первого gset. – Joe