我需要一些有关 SQL 中的逆透视数据的帮助。目前它在 SQL Server SSIS 包上运行。在未来,这将不再可能。我希望你能帮助我。
是否可以创建一个视图来创建结果?
我的出发点是:
PK | 日期 | AG | 艺术 | MA1 | MA2 | MA3 | BA1 | BA2 | BA3 | BS1 | BS2 | BS3 | BZ1 | BZ2 | BZ3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 01.01.2021 | 1 | A1 | M1 | M2 | M3 | 100 | 105 | 110 | 10 | 15 | 20 | 50 | 60 | 70 |
2 | 01.01.2021 | 1 | A2 | M2 | M3 | 100 | 113 | 11 | 12 | 18 | 8 | 9 | |||
3 | 02.01.2021 | 2 | A3 | M3 | 100 | 2 | 3 | 2 | 6 | ||||||
4 | 02.01.2021 | 5 | A3 | 12 | 13 | 8 | 8 | ||||||||
5 | 03.01.2021 | 3 | A4 | M2 | M3 | M1 | 100 | 102 | 103 | 3 | 4 | 5 | 7 | 8 | 9 |
6 | 03.01.2021 | 1 | A5 | M3 | M1 | 100 | 105 | 7 | 3 | 5 | 8 | 8 |
尝试了好几次让它看起来像这样,但我失败了:
我的目标是:
PK | 日期 | AG | 艺术 | MA | 文学士 | BS | BZ |
---|---|---|---|---|---|---|---|
1 | 01.01.2021 | 1 | A1 | M1 | 100 | 10 | 50 |
1 | 01.01.2021 | 1 | A1 | M2 | 105 | 15 | 60 |
1 | 01.01.2021 | 1 | A1 | M3 | 110 | 20 | 70 |
2 | 01.01.2021 | 1 | A2 | M2 | 100 | 11 | 8 |
2 | 01.01.2021 | 1 | A2 | M3 | 113 | 12 | 9 |
2 | 01.01.2021 | 1 | A2 | 18 | |||
3 | 02.01.2021 | 2 | A3 | M3 | 100 | 3 | 2 |
3 | 02.01.2021 | 2 | A3 | 2 | |||
3 | 02.01.2021 | 2 | A3 | 6 | |||
4 | 02.01.2021 | 5 | A3 | 12 | |||
4 | 02.01.2021 | 5 | A3 | 13 | |||
4 | 02.01.2021 | 5 | A3 | 8 | 8 | ||
5 | 03.01.2021 | 3 | A4 | M2 | 100 | 3 | 7 |
5 | 03.01.2021 | 3 | A4 | M3 | 102 | 4 | 8 |
5 | 03.01.2021 | 3 | A4 | M1 | 103 | 5 | 9 |
6 | 03.01.2021 | 1 | A5 | M3 | 100 | 3 | 8 |
6 | 03.01.2021 | 1 | A5 | M1 | 105 | 5 | 8 |
6 | 03.01.2021 | 1 | A5 | 7 |
MA "N",
BA "N",
BS“N”
和
BZ“N” 在“N”下属于一起
PK、Date、AG、Art 未触及
每个 MA、BA、BS 和 BZ 都可以为空。必须显示行,如果 MA ||巴|| BS || BZ不是空的。只有当所有 4 个都为空时,才能删除该行。
谁能帮我解决这个问题? 有什么想法吗?
您好 埃里克
答案 0 :(得分:5)
正如我在评论中提到的,CROSS APPLY VALUES 是处理这些类型的逆轴问题的最简单、效果最好的方法。
function sign_in() {
let id = $('#login-id').val()
let pw = $('#login-pw').val()
if (id == '') {
alert('Enter the ID')
return;
} else if (pw == '') {
alert('Enter the PW ')
return;
}
$.ajax({
type: 'POST',
url: '/sign_in',
data: {
id_give: id,
pw_give: pw
},
success: function (response) {
if (response['result'] == 'success') {
$.cookie('mytoken', response['token'], **{path: '/'}**);
window.location.replace("/")
} else {
alert(response['msg'])
}
}
})
}
DROP TABLE IF EXISTS #Test;
GO
CREATE TABLE #Test
(
PK TINYINT IDENTITY PRIMARY KEY
,[Date] DATE NOT NULL
,AG TINYINT NOT NULL
,ART VARCHAR(2) NOT NULL
,MA1 VARCHAR(2) NOT NULL
,MA2 VARCHAR(2) NOT NULL
,MA3 VARCHAR(2) NOT NULL
,BA1 VARCHAR(3) NOT NULL
,BA2 VARCHAR(3) NOT NULL
,BA3 VARCHAR(3) NOT NULL
,BS1 VARCHAR(2) NOT NULL
,BS2 VARCHAR(2) NOT NULL
,BS3 VARCHAR(2) NOT NULL
,BZ1 VARCHAR(2) NOT NULL
,BZ2 VARCHAR(2) NOT NULL
,BZ3 VARCHAR(2) NOT NULL
)
;
GO
INSERT INTO #Test
(
[Date]
,AG,ART
,MA1,MA2,MA3
,BA1,BA2,BA3
,BS1,BS2,BS3
,BZ1,BZ2,BZ3
)
VALUES
('01.01.2021',1,'A1', 'M1', 'M2', 'M3', '100', '105', '110', '10', '15', '20', '50', '60', '70')
,('01.01.2021',1,'A2', 'M2', 'M3', ' ', '100', '113', ' ', '11', '12', '18', '8 ', '9 ', ' ')
,('02.01.2021',2,'A3', 'M3', ' ', ' ', '100', '2 ', ' ', '3 ', ' ', ' ', '2 ', ' ', '6 ')
,('02.01.2021',5,'A3', ' ', ' ', ' ', '12 ', '13 ', ' ', ' ', ' ', '8 ', ' ', ' ', '8 ')
,('03.01.2021',3,'A4', 'M2', 'M3', 'M1', '100', '102', '103', '3 ', '4 ', '5 ', '7 ', '8 ', '9 ')
,('03.01.2021',1,'A5', 'M3', 'M1', ' ', '100', '105', '7 ', '3 ', '5 ', ' ', '8 ', '8 ', ' ')
;