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)