我有這個疑問:由不存在的列組或不包含sql server 2012子句中的空值?
SELECT 1 as Tipo, 'Total Efectivo'
AS tipo_pago,
ISNULL(SUM(p.monto), 0) AS Total,
suc.su_nombre AS Sucursal
FROM Comprobante c
RIGHT JOIN Pago p ON c.co_idcomp = p.co_idcomp
LEFT JOIN PagoCheque pc ON p.id_pago = pc.id_pago
LEFT JOIN Cheque ch ON pc.id_cheque = ch.id_cheque
LEFT JOIN PagoBoletaDeposito pbd ON p.id_pago = pbd.id_pago
LEFT JOIN BoletaDeposito bd ON pbd.id_boleta_deposito = bd.id_boleta_deposito
LEFT JOIN Movimientos m ON p.mv_id = m.mv_id
LEFT JOIN Sorteos s ON m.so_id = s.so_id
LEFT JOIN Clientes cl ON m.cl_id = cl.cl_id
LEFT JOIN Sucursales suc ON m.su_id = suc.su_id
WHERE p.esta_eliminado = 0 AND p.tipo_pago = 1 AND m.cl_id = 14 AND m.su_id = 1
GROUP BY suc.su_nombre
UNION
SELECT 2 as Tipo, 'Total Premios'
AS tipo_pago,
ISNULL(SUM(p.monto), 0) AS Total,
suc.su_nombre AS Sucursal
FROM Comprobante c
RIGHT JOIN Pago p ON c.co_idcomp = p.co_idcomp
LEFT JOIN PagoCheque pc ON p.id_pago = pc.id_pago
LEFT JOIN Cheque ch ON pc.id_cheque = ch.id_cheque
LEFT JOIN PagoBoletaDeposito pbd ON p.id_pago = pbd.id_pago
LEFT JOIN BoletaDeposito bd ON pbd.id_boleta_deposito = bd.id_boleta_deposito
LEFT JOIN Movimientos m ON p.mv_id = m.mv_id
LEFT JOIN Sorteos s ON m.so_id = s.so_id
LEFT JOIN Clientes cl ON m.cl_id = cl.cl_id
LEFT JOIN Sucursales suc ON m.su_id = suc.su_id
WHERE p.esta_eliminado = 0 AND p.tipo_pago = 2 AND m.cl_id = 14 AND m.su_id = 1
GROUP BY suc.su_nombre
UNION
SELECT 5 as Tipo, 'Total General' AS tipo_pago,
ISNULL(SUM(p.monto), 0) AS Total,
suc.su_nombre AS Sucursal
FROM Comprobante c
RIGHT JOIN Pago p ON c.co_idcomp = p.co_idcomp
LEFT JOIN PagoCheque pc ON p.id_pago = pc.id_pago
LEFT JOIN Cheque ch ON pc.id_cheque = ch.id_cheque
LEFT JOIN PagoBoletaDeposito pbd ON p.id_pago = pbd.id_pago
LEFT JOIN BoletaDeposito bd ON pbd.id_boleta_deposito = bd.id_boleta_deposito
LEFT JOIN Movimientos m ON p.mv_id = m.mv_id
LEFT JOIN Sorteos s ON m.so_id = s.so_id
LEFT JOIN Clientes cl ON m.cl_id = cl.cl_id
LEFT JOIN Sucursales suc ON m.su_id = suc.su_id
WHERE p.esta_eliminado = 0 AND m.cl_id = 14 AND m.su_id = 1
GROUP BY suc.su_nombre
我的問題是,如果有第二工會沒有價值,那麼結果沒有顯示,但我想包括他們,即使他們是空的。 但我不能GROUP BY欄目tipo_pago,因爲它給了我一個錯誤。
有沒有可能包含這個值?
更新:看到我需要澄清的答案,我不能使一個單一的查詢,我需要維護聯合和兩個查詢。
更新2:給我錯誤的查詢是我的錯,我錯過了查詢的重要部分與實現。有第三個UNION使得所有的tipo_pago的總和爲
爲什麼它是工會而不是工會全部?根據定義不能有重複,所以這只是額外的工作。另外爲什麼'c右加入左加入pc'而不是'p左加入c左加入pc'?正確的連接是徹頭徹尾的不直觀的,讓人們在嘗試閱讀你的查詢時會更加困難。最後,在where子句中引用'm'使得它成爲內連接,而不是左連接。 –
爲什麼如果功能上不必要和效率低下,你必須使用聯盟?即使沒有其他數據,我的答案也會爲您提供tipo_pago值(1和2)的記錄。 –
我編輯了我的答案,給你最後的總排。 –