Select * from OPENQUERY (PORTAL,
''SELECT st.last AS "Last Name", st.first AS "First Name", ct.DeviceName, SUM
(ct.PageCount) AS "Count", pm.TotalPerPage
FROM printer_stats.Counts ct
INNER JOIN dv.staff st on st.id = ct.UserID
LEFT JOIN network_map.PrintersToDevices ptd ON ptd.DeviceID = ct.DeviceID
LEFT JOIN network_map.PrinterModels pm ON ptd.PrinterID = pm.PrinterID
WHERE ct.UserID = "'[email protected]+'" and ct.PageCount > 0 and ct.Date >= "'[email protected]+'"
UNION
SELECT stu.last_name AS "Last Namae", stu.first_name AS "First Name",
ct.DeviceName,SUM(ct.PageCount) AS "Count", pm.TotalPerPage
FROM printer_stats.Counts ct
INNER JOIN dv.student stu on stu.username = ct.Username
LEFT JOIN network_map.PrintersToDevices ptd ON ptd.DeviceID = ct.DeviceID
LEFT JOIN network_map.PrinterModels pm ON ptd.PrinterID = pm.PrinterID
WHERE ct.UserID = "'[email protected]+'" and ct.PageCount > 0 and ct.Date
>= "'[email protected]+'"
GROUP BY ct.DeviceName
ORDER BY 4 DESC'')
は、私はこのような結果を得る:UNIONを使用しているときに、NULLの行全体を取り除く方法を教えてください。
Last Name First Name DeviceName Count TotalPerPage
Stewart Jesse BG-LMC-HP4100-01 39 0.0287581
Stewart Jesse BG-LMC-HP4100-02 9 0.0287581
Stewart Jesse BG-903-RI4210 2 0.013341
Stewart Jesse BG-218-HP4000 1 0.013341
NULL NULL NULL NULL NULL
私はすべてNULLの最後の行を望んでいません。
私は彼らが最初のSELECT
スタッフから来ていることを知っています。これは、一致する行がないはずであるからです。ユーザは学生なので一致しません。
すべてのフィールドにデータを含む行のみを表示する方法を知る必要があります。あなたはヌル行を提供しているあなたのUNION
のどの部分を知っている場合は
んスタッフのSELECTは、単独で実行したときにnullを返す - 他の部分はなし? –
単独で実行した場合、両方の部分が完全に実行されるわけではありません。私がそれらをUNIONするときだけ、NULLの行が得られ、それがStudent UserTypeのときだけです。 Staff UserTypeはNULLの行を返しません。 – user1040277
本当にSQL Serverの質問はありますか?彼らがOpenQueryを通じてMySqlサーバーに行くと、SQL Serverの角度(および構文)から質問に答えようとするので、人の時間を無駄にしてしまいます。 –