Sql , 将(*)算作电影, 计数(当s.Veiculo_Modelo“”时为1结束)为成功 从…起 积分器 哪里 m、 Ocr_DataHora>=“2012-09-17 00:00:00.000” 和m.Ocr_DataHora '' THEN 1 END) AS Sucesso FROM Integracao m WHERE m.Ocr_DataHora >= '2012-09-17 00:00:00.000' AND m.Ocr_DataHora < '2012-09-18 00:00:00.000' GROUP BY DATEPART(HOUR, m.Ocr_DataHora), (DATEPART(MINUTE, m.Ocr_DataHora) % 6) ORDER BY DATEPART(HOUR, m.Ocr_DataHora), (DATEPART(MINUTE, m.Ocr_DataHora) % 6)
如您所见,查询不会过滤Sql , 将(*)算作电影, 计数(当s.Veiculo_Modelo“”时为1结束)为成功 从…起 积分器 哪里 m、 Ocr_DataHora>=“2012-09-17 00:00:00.000” 和m.Ocr_DataHora '' THEN 1 END) AS Sucesso FROM Integracao m WHERE m.Ocr_DataHora >= '2012-09-17 00:00:00.000' AND m.Ocr_DataHora < '2012-09-18 00:00:00.000' GROUP BY DATEPART(HOUR, m.Ocr_DataHora), (DATEPART(MINUTE, m.Ocr_DataHora) % 6) ORDER BY DATEPART(HOUR, m.Ocr_DataHora), (DATEPART(MINUTE, m.Ocr_DataHora) % 6),sql,sql-server-2008,join,dynamically-generated,Sql,Sql Server 2008,Join,Dynamically Generated,如您所见,查询不会过滤s.Veiculo\u Modelo'上的行。但是,在计算Sucesso列的行数时使用该条件。第二个COUNT的参数是大小写表达式。如果满足指定的条件,则返回一个值(任意选择为1,但实际上可以是任何值),否则返回NULL。由于COUNT忽略空值,因此结果将与专用查询计算并返回successo的结果相同,正如其他人已经告诉您的那样,您可以将这两个查询用作派生表(subselect),并使用每个查询的Hora列将它们连接起来。在查询中是否计算列并不重要,在联接条件中使用它是完全
s.Veiculo\u Modelo'
上的行。但是,在计算Sucesso
列的行数时使用该条件。第二个COUNT
的参数是大小写表达式。如果满足指定的条件,则返回一个值(任意选择为1
,但实际上可以是任何值),否则返回NULL
。由于COUNT
忽略空值,因此结果将与专用查询计算并返回successo
的结果相同,正如其他人已经告诉您的那样,您可以将这两个查询用作派生表(subselect),并使用每个查询的Hora
列将它们连接起来。在查询中是否计算列并不重要,在联接条件中使用它是完全合法的
但是,我认为通过在一个查询中计算两个计数(即不使用子查询),可以更有效地获得相同的结果。以下是如何做到这一点:
SELECT
(
CAST(DATEPART(HOUR, m.Ocr_DataHora) AS NVARCHAR) +
':' +
CAST((DATEPART(MINUTE, m.Ocr_DataHora) % 6) AS NVARCHAR) +
'0'
) AS Hora,
COUNT(*) AS Movimentações,
COUNT(CASE WHEN s.Veiculo_Modelo <> '' THEN 1 END) AS Sucesso
FROM
Integracao m
WHERE
m.Ocr_DataHora >= '2012-09-17 00:00:00.000'
AND m.Ocr_DataHora < '2012-09-18 00:00:00.000'
GROUP BY
DATEPART(HOUR, m.Ocr_DataHora),
(DATEPART(MINUTE, m.Ocr_DataHora) % 6)
ORDER BY
DATEPART(HOUR, m.Ocr_DataHora),
(DATEPART(MINUTE, m.Ocr_DataHora) % 6)
选择
(
演员阵容(DATEPART(小时,m.Ocr_DataHora)为NVARCHAR)+
':' +
铸造((日期部分(分钟,m.Ocr_DataHora)%6)为NVARCHAR)+
'0'
)作为霍拉,
将(*)算作电影,
计数(当s.Veiculo_Modelo“”时为1结束)为成功
从…起
积分器
哪里
m、 Ocr_DataHora>=“2012-09-17 00:00:00.000”
和m.Ocr_DataHora<'2012-09-18 00:00:00.000'
分组
日期部分(小时,m.Ocr_DataHora),
(日期部分(分钟,m.Ocr_DataHora)%6)
订购人
日期部分(小时,m.Ocr_DataHora),
(日期部分(分钟,m.Ocr_DataHora)%6)
如您所见,查询不会过滤
s.Veiculo\u Modelo'
上的行。但是,在计算Sucesso
列的行数时使用该条件。第二个COUNT
的参数是大小写表达式。如果满足指定的条件,则返回一个值(任意选择为1
,但实际上可以是任何值),否则返回NULL
。由于COUNT
忽略空值,因此结果将与专用查询相同,计算并返回successo
我真的从来没有想过我可以在COUNT中执行case语句!:O即使在文档中也没有提及!!我真的从来没有想过我能做一个计数的案例陈述O即使在文档中也没有提及!!
SELECT
(
CAST(DATEPART(HOUR, s.Ocr_DataHora) AS NVARCHAR) +
':' +
CAST((DATEPART(MINUTE, s.Ocr_DataHora) % 6) AS NVARCHAR) +
'0'
) AS Hora,
COUNT(*) AS Sucesso
FROM
Integracao s
WHERE
s.Veiculo_Modelo <> ''
AND s.Ocr_DataHora >= '2012-09-17 00:00:00.000'
AND s.Ocr_DataHora < '2012-09-18 00:00:00.000'
GROUP BY
DATEPART(HOUR, s.Ocr_DataHora),
(DATEPART(MINUTE, s.Ocr_DataHora) % 6)
Hora | Movimentações | Sucesso
WITH
firstQuery(Hora, Movimentações) AS (<first query definition with out ORDER BY >),
secondQuery(Hora, Sucesso) AS (<second query definition with out ORDER BY >)
SELECT
f.Hora, f.Movimentações , s.Sucesso
FROM
firstQuery f
JOIN secondQuery s
ON f.Hora = s.Hora
Select A.Hora,A.Movimentações,B.Sucesso
From (*First Query*) as A
inner join (*Second Query*) as B on A.Hora = B.Hora
Select A.Hora,A.Movimentações,B.Sucesso
From (SELECT
(
CAST(DATEPART(HOUR, m.Ocr_DataHora) AS NVARCHAR) +
':' +
CAST((DATEPART(MINUTE, m.Ocr_DataHora) % 6) AS NVARCHAR) +
'0'
) AS Hora,
COUNT(*) AS Movimentações
FROM
Integracao m
WHERE
m.Ocr_DataHora >= '2012-09-17 00:00:00.000'
AND m.Ocr_DataHora < '2012-09-18 00:00:00.000'
GROUP BY
DATEPART(HOUR, m.Ocr_DataHora),
(DATEPART(MINUTE, m.Ocr_DataHora) % 6)
ORDER BY
DATEPART(HOUR, m.Ocr_DataHora),
(DATEPART(MINUTE, m.Ocr_DataHora) % 6)) As A
inner join (SELECT
(
CAST(DATEPART(HOUR, s.Ocr_DataHora) AS NVARCHAR) +
':' +
CAST((DATEPART(MINUTE, s.Ocr_DataHora) % 6) AS NVARCHAR) +
'0'
) AS Hora,
COUNT(*) AS Sucesso
FROM
Integracao s
WHERE
s.Veiculo_Modelo <> ''
AND s.Ocr_DataHora >= '2012-09-17 00:00:00.000'
AND s.Ocr_DataHora < '2012-09-18 00:00:00.000'
GROUP BY
DATEPART(HOUR, s.Ocr_DataHora),
(DATEPART(MINUTE, s.Ocr_DataHora) % 6)) As B on B.Hora = A.Hora
SELECT
(
CAST(DATEPART(HOUR, m.Ocr_DataHora) AS NVARCHAR) +
':' +
CAST((DATEPART(MINUTE, m.Ocr_DataHora) % 6) AS NVARCHAR) +
'0'
) AS Hora,
COUNT(*) AS Movimentações,
COUNT(CASE WHEN s.Veiculo_Modelo <> '' THEN 1 END) AS Sucesso
FROM
Integracao m
WHERE
m.Ocr_DataHora >= '2012-09-17 00:00:00.000'
AND m.Ocr_DataHora < '2012-09-18 00:00:00.000'
GROUP BY
DATEPART(HOUR, m.Ocr_DataHora),
(DATEPART(MINUTE, m.Ocr_DataHora) % 6)
ORDER BY
DATEPART(HOUR, m.Ocr_DataHora),
(DATEPART(MINUTE, m.Ocr_DataHora) % 6)