【发布时间】:2020-06-12 22:42:54
【问题描述】:
为了清楚起见,我在下面简化了两个表格。一个存储数据值,而另一个定义数据的单位和类型。有些测试有一个结果,有些可能有更多(我的实际表格有结果 1-10):
表“测试”:
ID Result1 Result2 TestType(FK to TestTypes Type)
---------- ------------ ----------- -----------
1001 50 29 1
1002 90.9 NULL 2
1003 12.4 NULL 2
1004 20.2 30 1
表'TestTypes':
Type TestName Result1Name Result1Unit Result2Name Result2Unit ..........
------- --------- ------------ ----------- ------------ -----------
1 Temp Calib. Temperature F Variance %
2 Clarity Turbidity CU NULL NULL
当我加入这两个表时,我想使用 ResultXName 作为列别名。换句话说,如果用户想要查看所有类型 1 'Temp Calib' 测试,则数据格式如下:
Temperature Variance
------------ -----------
50 F 10.1%
20.2 F 4.4%
或者如果他们查看类型 2,它只使用 1 个结果并且应该忽略 NULL:
Turbidity
----------
90.9 CU
12.4 CU
我在合并表格的两列方面取得了一些成功:
SELECT CONCAT(Result1, ' ', ISNULL(Result1Unit, ''))
FROM Tests
INNER JOIN TestTypes ON Tests.TestType = TestTypes.Type
但我不知道如何使用 TestName 作为新的列别名。这是我一直在尝试使用子查询的方法,但似乎 AS 子句中不允许使用子查询:
SELECT CONCAT(Result1, ' ', ISNULL(Result1Unit, '')) AS (SELECT TOP(1) Result1Name FROM TestTypes WHERE Type = 1)
FROM Tests
INNER JOIN TestTypes ON Tests.TestType = TestTypes.Type
我可以使用其他方法吗?或者我是否需要重组我的数据来实现这一点?我正在使用 MSSQL。
【问题讨论】:
-
您将很难在查询中执行此操作(可能是动态的)。我会尝试将所有列组合起来,然后在 SSRS 之类的报告工具中进行格式化(在规则上显示/隐藏列)。查询不能很好地处理不同数量的列和数据类型
-
哦,你真的不想在一个列中组合一个数字和一个单位。这意味着它现在是一个字符串而不是一个数字。我知道您将 90.9 CU + 12.4 CU 视为 103.3 CU,但这不是它在 SQL 中的工作方式。那将是字符串连接与加法。同样,您可以在报告工具中使用额外的列作为显示列来执行此操作,但将值保存在自己的列中。
-
对于我的应用程序,不需要保留数据类型。它仅用作显示器。也就是说,我可能会将两列分开,以防我稍后想对数据进行计算。我正在使用 Ignition SCADA 软件 - 我确实可以通过脚本控制列名。我的计划 B 是只使用编写一个 python 脚本来相应地更新标题。
-
10.1%的方差是怎么来的?
标签: sql sql-server subquery alias