在SQL中,如何查询三个不同的表,并在其他表为NULL时找到具有值的表



大家好,我想知道是否有人可以帮助我解决SQL问题。我们有一个包含所有打印机及其相关设置的数据库。由于我们有三代打印机设置被放置在不同的表中,通过序列号链接到主表。 由于未商定命名约定,每个设置也会被赋予不同的名称。例如,我正在查看开始设置

表 1 - dbo。包含所有打印机序列号和第 1 代设置的基本主表

表 2 - dbo。通过串行链接的 RioPro360Gen 2 打印机设置

表 3 - dbo。通过串行链接的 HelicalDataGen 3 打印机设置

每个表都使用序列号作为唯一 ID

作为测试查询,我可以运行以下内容

SELECT
LTRIM(RTRIM(UPPER(a.SerialNo))) AS [ID],
LTRIM(RTRIM(UPPER(a.SerialNo))) AS [Name],
ISNULL(LTRIM(RTRIM(a.ImageStart)),'NULL') AS [Start A],
ISNULL(LTRIM(RTRIM(b.PrintImageStart)),'NULL') [Start B],
ISNULL(LTRIM(RTRIM(c.TransferStartOffset)),'NULL') AS [Start C]
FROM SAP_RIOTANGO.dbo.Base AS a
LEFT JOIN SAP_RIOTANGO.dbo.RioPro360 AS b ON b.IdPrinterSerial = a.SerialNo
LEFT JOIN SAP_RIOTANGO.dbo.HelicalData AS c ON c.printerSerial = a.SerialNo
WHERE a.SerialNo = '73F3939' OR  a.SerialNo = '66717401' OR  a.SerialNo = '58905701'

结果

+----------+----------+---------+--------+---------+
|    ID    |  SERIAL  | START A | STAR B | START C |
+----------+----------+---------+--------+---------+
| 66717401 | 66717401 | NULL    | 1200   | NULL    |
| 73F3939  | 73F3939  | -115    | NULL   | NULL    |
| 58905701 | 58905701 | NULL    | NULL   | 21      |
+----------+----------+---------+--------+---------+

这为我提供了具有值的表中每台打印机的开始设置。我需要做的是将开头合并为一列

所需结果

+----------+----------+-------+
|    ID    |  SERIAL  | START |
+----------+----------+-------+
| 66717401 | 66717401 |  1200 |
| 73F3939  | 73F3939  |  -115 |
| 58905701 | 58905701 |    21 |
+----------+----------+-------+

我正在考虑创建一个临时表并运行一个子查询,如果一个字段为空但无法让它工作,如果有人可以帮助我让它返回我想要的东西,我会徘徊

只需使用COALESCE()

SELECT LTRIM(RTRIM(UPPER(a.SerialNo))) AS [ID],
LTRIM(RTRIM(UPPER(a.SerialNo))) AS [Name],
COALESCE(LTRIM(RTRIM(a.ImageStart)),
LTRIM(RTRIM(b.PrintImageStart)),
LTRIM(RTRIM(c.TransferStartOffset))
) as [Start]

最新更新