我有像数据的两个表:MSSQL/TSQL分离字段为行上值
表:test_results
ID |test_id |test_type |result_1 |amps |volts |power |
----+-----------+-----------+-----------+-----------+-----------+-----------+
1 |101 |static |10.1 |5.9 |15 |59.1 |
2 |101 |dynamic |300.5 |9.1 |10 |40.1 |
3 |101 |prime |48.9 |8.2 |14 |49.2 |
4 |101 |dual |235.2 |2.9 |11 |25.8 |
5 |101 |static |11.9 |4.3 |9 |43.3 |
6 |101 |prime |49.9 |5.8 |15 |51.6 |
和
表:test_records
ID |model |test_date |operator |
----+-----------+-----------+-----------+
101 |m-300 |some_date |john doe |
102 |m-243 |some_date |john doe |
103 |m-007 |some_date |john doe |
104 |m-523 |some_date |john doe |
105 |m-842 |some_date |john doe |
106 |m-252 |some_date |john doe |
我正在编写一份如下所示的报告:
|static |dynamic |
test_id |model |test_date |operator |result_1 |amps |volts |power |result_1 |amps |volts |power |
-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
101 |m-300 |some_date |john doe |10.1 |5.9 |15 |59.1 |300.5 |9.1 |10 |40.1 |
左外连接,像这样:
SELECT
A.ID AS test_id, model, test_date, operator,
B.result_1, B.amps, B.volts, B.power,
C.result_1, C.amps, C.volts, C.power
FROM
test_records A
LEFT JOIN
test_results B
ON
A.ID = B.test_id
AND
B.test_type = 'static'
LEFT JOIN
test_results C
ON
A.ID = C.test_id
AND
C.test_type = 'dynamic'
但我遇到了一个问题。 “静态”和“主要”测试运行两次。 我不知道如何区分他们创建自己的4个领域。 所需报告的抽象(简化)视图看起来像:
|static |dynamic |prime |dual |static2 |prime2 |
|4 fields |4 fields |4 fields |4 fields |4 fields |4 fields |
这甚至可能吗? 注:
- 我标注4场的组,HTML,所以不用担心标签
- 不是每个测试将运行“静态”和“素”的两倍。所以这是一个If(“static”和“prime”)被发现两次的情况,请执行此SQL。
- 我想我们会让我们的工程师在第二次测试中附加一个2来消除问题,所以这个问题更多的是出于好奇,知道什么方法可以解决这样的问题。
的“4个领域”是一个抽象。它将从字面上是4个独立字段的sql输出。不需要做任何额外的工作来制作某种逗号分隔的列表。每组4个字段与test_type相关联。查看我的文章中的第三个代码块,查看未抽象的版本。 – Van
'test_results'表中有2条记录'101&static'您想如何显示它们? – NEER
您可以使用'test_sequence'列来区分多次执行相同的'test_type'。 –