簡體   English   中英

SQL在子查詢中返回空單元格

[英]Sql return empty cell in subquery

我有兩個表:

transfers
| No_ | PostingDate | Code |

comments
| No_ | comment |

一次轉移可以有很多評論。

我需要創建一個查詢,該查詢返回所有轉賬以及其注釋中的前1條注釋,如果沒有注釋,則為空注釋。

SELECT 
    th.[No_], 
    th.[Posting Date] as 'PostingDate',
    th.[Transfer-to Code] as 'Transfer_To', 
    icl.Comment
FROM 
    dbo.[company$Transfer Header] as th,
    dbo.[company$Inventory Comment Line] as icl
where 
    th.No_=icl.No_

我有這個,但它只返回帶有注釋的傳輸。

我該如何退回所有轉賬,如果轉賬沒有評論,則返回空評論。

LEFT JOINCOALESCE一起用空注釋替換缺少的NULL值:

SELECT th.[No_], th.[Posting Date] as 'PostingDate',
       th.[Transfer-to Code] as 'Transfer_To',
       COALESCE(icl.Comment, '')
FROM
    dbo.[company$Transfer Header] AS th
LEFT JOIN
    dbo.[company$Inventory Comment Line] AS icl
    ON th.No_ = icl.No_

我可能傾向於使用outer apply

SELECT th.[No_], th.[Posting Date] as PostingDate,
       th.[Transfer-to Code] as Transfer_To,
       COALESCE(icl.Comment, '') as Comment
FROM dbo.[company$Transfer Header] as th OUTER APPLY
     (SELECT TOP 1 icl.*
      FROM dbo.[company$Inventory Comment Line] icl
      WHERE th.No_ = icl.No_
     ) icl;

這假定您要一個注釋,並且當沒有注釋時,您需要一個空字符串。

筆記:

  • 子查詢應具有ORDER BY子句,但尚不清楚如何選擇一個注釋。
  • 不要使用隱式JOIN語法。
  • 僅對字符串和日期常量使用單引號。 盡管在定義列別名時允許使用,但在使用列別名時不允許使用它們,這樣只會導致混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM