2012-12-21 49 views
1

所以我想要做的事情左边加入这个表,它将定义问题表中的问题,并检查响应表。 我写了左连接来定义每个问题作为自己的列,但它不工作..任何想法?从mysql中的字符串创建一个列

select * 
FROM Leads l 
/*JOIN Projects P ON L.projectid=P.projectid 
JOIN Leads LE ON LE.LISTID=L.listid 
JOIN Calls CA ON CA.LEADID=LE.leadid*/ 

join Lists li on (li.Listid=l.Listid) 
JOIN Projects P ON (Li.projectid=P.projectid) 
join Calls ca on (ca.leadid=l.leadid) 

LEFT JOIN (
SELECT 
leadid, 
Authorized=MIN(CASE qname WHEN 'Authorized' THEN RESPONSE END), 
ReplacementName=MIN(CASE qname WHEN 'ReplacementName' THEN RESPONSE END), 
SpokeToGroup=MIN(CASE qname WHEN 'SpokeToGroup' THEN RESPONSE END), 
SpokeToName=MIN(CASE qname WHEN 'SpokeToName' THEN RESPONSE END), 
SpokeToTitle=MIN(CASE qname WHEN 'SpokeToTitle' THEN RESPONSE END), 
WishToRecieve=MIN(CASE qname WHEN 'WishToRecieve' THEN RESPONSE END), 
Question01=MIN(CASE qname WHEN 'Question01' THEN RESPONSE END), 
... -- lots of other fields 
MAGExpiration=MIN(CASE qname WHEN 'MAGExpiration' THEN RESPONSE END), 
SourceGroup=MIN(CASE qname WHEN 'SourceGroup' THEN RESPONSE END), 
SourceID=MIN(CASE qname WHEN 'SourceID' THEN RESPONSE END), 
ClientOtherID=MIN(CASE qname WHEN 'ClientOtherID' THEN RESPONSE END) 

from Questions q join Responses r on (r.questionid=q.questionid) 
) 
+1

如果你有一个名为类似“Foo1”和Foo2" 等栏目,这通常是一个迹象,表明你的数据库是 –

+1

你在MySQL或SQL Server中运行这个查询吗? – Taryn

回答

3

你的子查询缺少一个GROUP BY

GROUP BY leadid 

所有正在使用的聚合功能,但你也不会受任何分组。

您还应该在CASE声明中包含ELSE

可能有更好的方法来执行此操作。如果您正在使用SQL Server,那么使用PIVOT函数可以更轻松地执行此操作。既然你有很多领域,你试图转动,你应该看看在SQL服务器中使用动态SQL和准备在MySQL中的语句。

编辑#1,你似乎也缺少了一些关键内容:

select * 
FROM Leads l 
/*JOIN Projects P ON L.projectid=P.projectid 
JOIN Leads LE ON LE.LISTID=L.listid 
JOIN Calls CA ON CA.LEADID=LE.leadid*/ 

join Lists li on (li.Listid=l.Listid) 
JOIN Projects P ON (Li.projectid=P.projectid) 
join Calls ca on (ca.leadid=l.leadid) 
LEFT JOIN 
(
    SELECT 
    leadid, 
    MIN(CASE qname WHEN 'Authorized' THEN RESPONSE END) as Authorized, 
    MIN(CASE qname WHEN 'ReplacementName' THEN RESPONSE END) as ReplacementName, 
    MIN(CASE qname WHEN 'SpokeToGroup' THEN RESPONSE END) as SpokeToGroup, 
    MIN(CASE qname WHEN 'SpokeToName' THEN RESPONSE END) as SpokeToName, 
    MIN(CASE qname WHEN 'SpokeToTitle' THEN RESPONSE END) as SpokeToTitle, 
    MIN(CASE qname WHEN 'WishToRecieve' THEN RESPONSE END) as WishToRecieve, 
    MIN(CASE qname WHEN 'Question01' THEN RESPONSE END) as Question01, 
    ... -- lots of other fields 
    MIN(CASE qname WHEN 'MAGExpiration' THEN RESPONSE END) as MAGExpiration, 
    MIN(CASE qname WHEN 'SourceGroup' THEN RESPONSE END) as SourceGroup, 
    MIN(CASE qname WHEN 'SourceID' THEN RESPONSE END) as SourceID, 
    MIN(CASE qname WHEN 'ClientOtherID' THEN RESPONSE END) as ClientOtherID 
    from Questions q 
    join Responses r 
    on (r.questionid=q.questionid) 
    group by leadid 
) qr -- an alias for the subquery 
    on l.leadid = qr.leadid -- the on for the join 
+0

好吧,这对我没有太大的帮助..我在我的MSSQL服务器上运行这个mysql,左边的连接子查询运行正常吗有没有从mssql到mysql的任何重大更改? – user1922240

+0

@ user1922240您是否收到错误?您能澄清哪些不起作用吗? – Taryn

+0

[错误] 1064 - 您的SQL语法错误;请检查manu AL对应于你的MySQL服务器版本的正确语法使用附近''在419行和419只是组没有'' – user1922240