我写了这个查询,它从另一个表中返回unique_ID和最大音符编号。问题是我还需要它来显示空值的注释号的唯一ID(I.E.没有最大值)。这可以从这个查询中做到吗?我已经尝试了所有我能想到的东西,这就是我所能得到的。
SELECT
q.[Unique ID]
,qn.[Note Number], qn.*, q.*
FROM
Q_NOT_PROC q
LEFT JOIN QUEUE_NOTES qn ON qn.[Order Item UniqueID] = q.[Unique ID]
INNER JOIN
(
SELECT
qn.[Order Item UniqueID]
,MAX(qn.[Note Number]) NoteNum
FROM
QUEUE_NOTES qn
JOIN Q_NOT_PROC q ON q.[Unique ID] = qn.[Order Item UniqueID]
GROUP BY
qn.[Order Item UniqueID]
) b ON b.[Order Item UniqueID] = q.[Unique ID]
AND b.NoteNum = qn.[Note Number];
如果它返回音符编号6,那么这也意味着音符编号为0-5。我只是想看看最大音符编号。我还需要看到没有笔记的那些(null)
目前的回报:
+-----------+----------+
| Unique_ID | Note Num |
+-----------+----------+
| U_ID1 | 6 |
| U_ID2 | 4 |
| U_ID3 | 2 |
+-----------+----------+
我需要它返回:
+-----------+----------+
| Unique_ID | Note Num |
+-----------+----------+
| U_ID1 | 6 |
| U_ID2 | 4 |
| U_ID3 | 2 |
| U_ID4 | null |
| U_ID5 | null |
+-----------+----------+
答案 0 :(得分:2)
只需将inner join
更改为left join
SELECT q.[Unique ID], b.[Note Number]
FROM Q_NOT_PROC q
LEFT JOIN QUEUE_NOTES qn
ON qn.[Order Item UniqueID] = q.[Unique ID]
LEFT JOIN ( -- Do left join instead of inner join
SELECT qn.[Order Item UniqueID] , MAX(qn.[Note Number]) NoteNum
FROM QUEUE_NOTES qn
JOIN Q_NOT_PROC q ON q.[Unique ID] = qn.[Order Item UniqueID]
GROUP BY qn.[Order Item UniqueID]
) b ON b.[Order Item UniqueID] = q.[Unique ID] AND
b.NoteNum = qn.[Note Number];
修改 问题后编辑
SELECT Q.[Unique ID], b.NoteNum
FROM Q_NOT_PROC Q LEFT JOIN (
SELECT [Order Item UniqueID] UniqueId, MAX([Note Number]) NoteNum
FROM QUEUE_NOTES qn
GROUP BY [Order Item UniqueID]) b ON b.UniqueId = Q.[Unique ID]
答案 1 :(得分:0)
我明白了。
SELECT q.[Unique ID], qn.[Note Number], qn.*, q.*
FROM Q_NOT_PROC qnp
LEFT JOIN QUEUE_NOTES qn
ON qn.[Order Item UniqueID] = qnp.[Unique ID]
INNER JOIN (
SELECT qn.[Order Item UniqueID] , MAX(qn.[Note Number]) NoteNum
FROM QUEUE_NOTES qn
JOIN Q_NOT_PROC qnp ON qnp.[Unique ID] = qn.[Order Item UniqueID]
GROUP BY qn.[Order Item UniqueID]
) b ON b.[Order Item UniqueID] = qnp.[Unique ID]
AND b.NoteNum = qn.[Note Number]
UNION ALL
SELECT q.[Unique ID], qn.[Note Number], qn.*, q.*
FROM Q_NOT_PROC qnp
LEFT JOIN QUEUE_NOTES qn
ON qn.[Order Item UniqueID] = qnp.[Unique ID]
WHERE qn.[Note Number] IS NULL