我正在寫一個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