我正在写一个SQL查询,我想向具有基于另一个记录中存在值的值的记录集添加一列表。我有一个左连接加入表,我假设我必须在我的SQL中做一些透视,但我不熟悉表旋转。根据另一个表中的记录是否存在将列添加到select语句中
我现有的SQL是
SELECT tabs.name,tabs.id AS tabid,tabs.sort,fields.id AS fieldid, fields.label
FROM tabs
INNER JOIN fields
ON tabs.id = fields.tabid
LEFT JOIN fields_reports
ON fields_reports.fieldid = fields.id
WHERE fields_reports.reportid = 57
GROUP BY fields.id
ORDER BY tabs.sort, fields.id
发生了什么事的SQL是,它拉场(这是声明的核心)和标签(这是essentailly类别)。 fields_reports表将字段映射到我正在构建的报告。
我需要做的是在我的语句中添加一列,如下所示:如果当前字段在fields_reports表中有记录(57)中传入的报告编号,则将列值赋值为1,否则为0。
编辑:我有查询的另一个问题。现在,查询只能将附加到一个报告的字段提取出来。有没有办法让我可以通过fields_reports表做一个子查询来选择,这样我就可以拉出所有的字段,然后将列附加到报表中?
这是现在拉记录查询,但只有拉一个报告领域
SELECT tabs.name,tabs.id AS tabid,tabs.sort,fields.id AS fieldid, fields.label,
CASE WHEN fields_reports.id IS null THEN 0 ELSE 1 END AS inReport
FROM fields
INNER JOIN tabs
ON tabs.id = fields.tabid
LEFT JOIN fields_reports
ON fields_reports.fieldid = fields.id
WHERE fields_reports.reportid = 57
GROUP BY fields.id
ORDER BY tabs.sort, fields.id
让我知道我是否应该开辟一个新的问题这一点。
这解决了我发布完美的第二个问题。 – 2011-03-07 16:15:15
不好意思混淆你的名字,我不是那个意思。 :)其实你的答案似乎有其他问题。 “GROUP BY”列表不包含“fields_reports.reportid”,并且此字段未汇总在您的解决方案中。 [doc](http://dev.mysql。com/doc/refman/5.5/en/group-by-hidden-columns.html)表示这样的情况:'服务器可以自由地从组中返回任何值,所以结果是不确定的,除非所有的值都相同。 '显然'fields_reports.reportid'的所有值对于我们正在分组的所有特定'fields.id'不一定是相同的。 – 2011-03-07 19:35:28