SQL Return 每行即使是 Null 值

SQL Return every row even if Null values

我想 return 合同 table 中的所有行,但是第二个 WHERE 子句只生成不为空的行。 (换句话说,在下面的代码中 'CAD' 限制意味着大约一半的可能行没有以加元交易的价值,因此没有 returned -- 而我想要所有可能的行 returned 在适用的地方显示 NULL 值)。

我认为这是一个 Left Self Join 但我在语法上苦苦挣扎(and/or 我是否需要做一个内部 Select),

 SELECT MeasurableID,
     EntityID,
     MIN (ContractPrice) AS LowPrice,
     MAX (ContractPrice) AS HighPrice

 FROM dbo.Contracts

 WHERE dbo.Contracts.MeasurableID = 2018
  AND  Contracts.CurrencyCode IN ( 'CAD' ) 

 GROUP BY
  dbo.Contracts.MeasurableID,
  dbo.Contracts.EntityID  

使用条件聚合:

SELECT  
  MeasurableID,
  EntityID,
  MIN (CASE WHEN CurrencyCode = 'CAD' THEN ContractPrice END) AS LowPrice,
  MAX (CASE WHEN CurrencyCode = 'CAD' THEN ContractPrice END) AS HighPrice
FROM dbo.Contracts
WHERE MeasurableID = 2018
GROUP BY MeasurableID, EntityID
ORDER BY MeasurableID, EntityID;

对于未来的读者,Thorsten 回答了已发布的问题,但根据他的回答下方的评论,该问题无法付诸实践。因此,我不得不这样编码:

    SELECT
        t1.MeasurableID,
        t1.EntityID,
        t2.HIGH,
        t2.LOW
    FROM
        (
            SELECT
                MeasurableID,
                EntityID
            FROM
                Contracts
            WHERE
                MeasurableID IN (2017, 2018)
            GROUP BY
                MeasurableID,
                EntityID
        ) t1
    LEFT JOIN (
        SELECT
            MeasurableID,
            EntityID,
            MAX (ContractPrice) AS HIGH,
            MIN (ContractPrice) AS LOW
        FROM
            Contracts
        WHERE
            MeasurableID IN (2017, 2018)
        AND CurrencyCode IN ('CAD', 'BTC')
        GROUP BY
            MeasurableID,
            EntityID
    ) t2 ON t1.MeasurableID = t2.MeasurableID
    AND t1.EntityID = t2.EntityID
    ORDER BY
        t1.MeasurableID,
        t1.EntityID;

使用分组依据..

select * 来自 Adjusters group by CompanyID;