如何使用案例条件在一行中获取数据

How to fetch data in one row using case condition

我有两个表,我希望数据应采用特定格式。

我的查询

SELECT 
DISTINCT ur.suid,
(CASE WHEN ur.sceneID = '1' THEN ur.data ELSE 0 END) AS Scenario1data, 
(CASE WHEN ur.sceneID = '1' THEN ss.score ELSE 0 END) AS Scenario1score, 
(CASE WHEN ur.sceneID = '2' THEN ur.data ELSE 0 END) AS Scenario2,
(CASE WHEN ur.sceneID = '3' THEN ur.data ELSE 0 END) AS Scenario3, 
(CASE WHEN ur.sceneID = '4' THEN ur.data ELSE 0 END) AS Scenario4  
FROM tbluserresults AS ur LEFT JOIN tbluserscenescores AS ss ON ss.suid = ur.suid;

我想要的结果

suid    Scenario1data   Scenario1score  Scenario2   Scenario3   Scenario4
1        'abc show1'           334      abc show2    abc show3 abc show 4
2           0              0                0   0.

查看我的SQLFIDDLE

可能还有其他更好的方法可以做到这一点,但我相信以下方法可以满足您的需求

SELECT results.suid as suid,
 (CASE WHEN results.Scenario1data IS NOT NULL THEN results.Scenario1data ELSE 0 END) AS Scenario1data,
 (CASE WHEN results.Scenario1score IS NOT NULL THEN results.Scenario1score ELSE 0 END) AS Scenario1score,
 (CASE WHEN results.Scenario2 IS NOT NULL THEN results.Scenario2 ELSE 0 END) AS Scenario2,
 (CASE WHEN results.Scenario3 IS NOT NULL THEN results.Scenario3 ELSE 0 END) AS Scenario3,
 (CASE WHEN results.Scenario4 IS NOT NULL THEN results.Scenario4 ELSE 0 END) AS Scenario4
FROM
(SELECT DISTINCT(suid), @suid:= suid,
  (SELECT ur.data FROM tbluserresults ur WHERE ur.suid = @suid AND ur.sceneID = '1') AS Scenario1data,
  (SELECT ss.score FROM tbluserscenescores ss WHERE ss.suid = @suid AND ss.sceneID = '1') AS Scenario1score,
  (SELECT ur.data FROM tbluserresults ur WHERE ur.suid = @suid AND ur.sceneID = '2') AS Scenario2,
  (SELECT ur.data FROM tbluserresults ur WHERE ur.suid = @suid AND ur.sceneID = '3') AS Scenario3,
  (SELECT ur.data FROM tbluserresults ur WHERE ur.suid = @suid AND ur.sceneID = '4') AS Scenario4
FROM tbluserscenescores) AS results