2017-06-21 12 views
0

私のクエリに問題があります。私は今2つのクエリがあり、それはうまく動作します。しかし、PIVOTを使って別のクエリを追加する場合は、機能しません。これは私の最初の2つのクエリクエリを組み合わせる.. PIVOTが機能しない

$query = "SET SQL_BIG_SELECTS = 1;"; 
 
$query .= "SELECT * FROM datakram, datakram2, datakram3 WHERE datakram.NAME = datakram2.NAME AND datakram2.NAME = datakram3.NAME"

そして、私はテーブル「datakram4」のPIVOTを追加したい..です

を私は多くのことを試してみましたが、何も働きません。しかし、NAMEが他のテーブルのNAMEと等しい行のみを必要とします。 PIVOTがなければそれは働く。

私のPIVOTコード。私は私のPHPスクリプトのためmulti_queryの使用

SELECT `name` , 
 
MAX(CASE WHEN `year` =2017 THEN `income` ELSE 0 END) AS INCOME_2017, 
 
MAX(CASE WHEN `year` =2017 THEN `expense` ELSE 0 END) AS EXPENSE_2017, 
 
MAX(CASE WHEN `year` =2016 THEN `income` ELSE 0 END) AS INCOME_2016, 
 
MAX(CASE WHEN `year` =2016 THEN `expense` ELSE 0 END) AS EXPENSE_2016 
 
FROM `test_data` GROUP BY `name`

答えて

2

は、単にクエリに参加:

SELECT d4.* 
FROM datakram d1 
INNER JOIN datakram2 d2 
    ON d1.`NAME` = d2.`NAME` 
INNER JOIN datakram3 d3 
    ON d2.`NAME` = d3.`NAME` 
INNER JOIN 
    (SELECT `name` , 
     MAX(CASE WHEN `year`=2017 THEN `income` ELSE 0 END) AS INCOME_2017, 
     MAX(CASE WHEN `year`=2017 THEN `expense` ELSE 0 END) AS EXPENSE_2017, 
     MAX(CASE WHEN `year`=2016 THEN `income` ELSE 0 END) AS INCOME_2016, 
     MAX(CASE WHEN `year`=2016 THEN `expense` ELSE 0 END) AS EXPENSE_2016 
    FROM `test_data` 
    GROUP BY `name` 
    ) d4 
    ON d3.`NAME` = d4.`name` 
+0

私はこれを試してみました。しかし、私はまた、他のテーブルの変数も必要です。私はFULL JOINでそれを変更しました。しかし、それはうまくいかなかった。 RIGHT/LEFT JOINはうまくいきます... – Mooelb

+0

'SELECT'節に他の列を追加し、' SELECT d1。*、d2。*、d3。*、d4。* 'を追加するか、個々に識別します。 – Parfait

1

簡単な方法は、WHERE句でフィルタリングすることである。

SELECT `name` , 
     MAX(CASE WHEN `year` = 2017 THEN `income` ELSE 0 END) AS INCOME_2017, 
     MAX(CASE WHEN `year` = 2017 THEN `expense` ELSE 0 END) AS EXPENSE_2017, 
     MAX(CASE WHEN `year` = 2016 THEN `income` ELSE 0 END) AS INCOME_2016, 
     MAX(CASE WHEN `year` = 2016 THEN `expense` ELSE 0 END) AS EXPENSE_2016 
FROM `test_data` td 
WHERE EXISTS (SELECT 1 FROM FROM datakram d WHERE d.name = td.NAME) AND 
     EXISTS (SELECT 1 FROM FROM datakram2 d WHERE d.name = td.NAME) AND 
     EXISTS (SELECT 1 FROM FROM datakram3 d WHERE d.name = td.NAME) 
GROUP BY `name` ; 
関連する問題