大家好,我想知道是否有人可以帮助我解决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]