我需要指定不同的,其中的条款,以不同的列,例如,我的“PrinterCounter.EndPagesColor”和“PrinterCounter.EndPagesMono”我想用这个地方:SQL服务器 - 不同的WHERE的条款,以不同的列
WHERE
PrinterCounter.ReadTime >= '01/07/2017 00:00:01'
AND PrinterCounter.ReadTime <= '31/07/2017 23:59:59'
AND Printer.WasRemoved = 0
AND ClientId = 6
AND SubClientId = 752
ORDER BY
PrinterCounter.ReadTime DESC
但对于 “PrinterCounter.StartPagesColor” 和 “PrinterCounter.StartPagesMono” 我想这一个:
WHERE
PrinterCounter.ReadTime >= '01/07/2017 00:00:01' AND
PrinterCounter.ReadTime <= '31/07/2017 23:59:59' AND
Printer.WasRemoved = 0 AND
ClientId = 6 AND
SubClientId = 752
ORDER BY
PrinterCounter.ReadTime ASC
下面是完整的代码:
SELECT DISTINCT
Printer.[PrinterId],
Printer.[PlaceId],
PrinterCounter.ReadTime,
PrinterCounter.EndPagesColor,
PrinterCounter.EndPagesMono,
PrinterCounter.StartPagesColor,
PrinterCounter.StartPagesMono
FROM
[~client_database~].[dbo].[Printers] AS Printer
JOIN
[~system_database~].[dbo].[PrinterCounter] AS PrinterCounter ON PrinterCounter.PrinterId = Printer.PrinterId
WHERE
PrinterCounter.ReadTime >= '01/07/2017 00:00:01'
AND PrinterCounter.ReadTime <= '31/07/2017 23:59:59'
AND Printer.WasRemoved = 0
AND ClientId = 6
AND SubClientId = 752
ORDER BY
PrinterCounter.ReadTime ASC
我会为你弄清楚,每台打印机在一天开始时有一个计数器,一天在结束时,产量将减去开始。
每个客户有几台打印机,我必须在提供的时间内收集每台打印机的产量。
该连接是为了确保SQL仅返回带有计数器的打印机。
这是一个想:
SELECT
DISTINCT
Printer.PrinterId
,Printer.PlaceId
,PrinterCounter.ReadTime
,(
SELECT TOP 1
EndPagesMono
FROM
[system_mfpm].[dbo].[PrinterCounter]
WHERE
PrinterCounter.ReadTime >= '01/07/2017 00:00:01' AND PrinterCounter.ReadTime <= '31/07/2017 23:59:59'
AND PrinterCounter.ClientId = 6
AND PrinterCounter.SubClientId = 752
AND PrinterCounter.PrinterId = Printer.PrinterId
ORDER BY PrinterCounter.ReadTime DESC
)-(
SELECT TOP 1
StartPagesMono
FROM
[system_mfpm].[dbo].[PrinterCounter]
WHERE
PrinterCounter.ReadTime >= '01/07/2017 00:00:01' AND PrinterCounter.ReadTime <= '31/07/2017 23:59:59'
AND PrinterCounter.ClientId = 6
AND PrinterCounter.SubClientId = 752
AND PrinterCounter.PrinterId = Printer.PrinterId
ORDER BY PrinterCounter.ReadTime ASC
) AS Mono
,(
SELECT TOP 1
EndPagesColor
FROM
[system_mfpm].[dbo].[PrinterCounter]
WHERE
PrinterCounter.ReadTime >= '01/07/2017 00:00:01' AND PrinterCounter.ReadTime <= '31/07/2017 23:59:59'
AND PrinterCounter.ClientId = 6
AND PrinterCounter.SubClientId = 752
AND PrinterCounter.PrinterId = Printer.PrinterId
ORDER BY PrinterCounter.ReadTime DESC
)-(
SELECT TOP 1
StartPagesColor
FROM
[system_mfpm].[dbo].[PrinterCounter]
WHERE
PrinterCounter.ReadTime >= '01/07/2017 00:00:01' AND PrinterCounter.ReadTime <= '31/07/2017 23:59:59'
AND PrinterCounter.ClientId = 6
AND PrinterCounter.SubClientId = 752
AND PrinterCounter.PrinterId = Printer.PrinterId
ORDER BY PrinterCounter.ReadTime ASC
) AS Color
FROM [client_lfn_MTUXNJCZMJQA].[dbo].[Printers] AS Printer
JOIN [system_mfpm].[dbo].[PrinterCounter] AS PrinterCounter ON PrinterCounter.PrinterId = Printer.PrinterId
WHERE Printer.WasRemoved = 0
,但我敢肯定这是一个不好的做法,它可以提高
是不是这两个'WHERE'子句相同? – sagi
我看到的唯一区别是'ORDER BY'方向 – Siyual
您可以做2个单独的查询并使用'Union'吗? – Nope