Sql server 将MS Access转换语句转换为T-SQL
我正在尝试将以下查询从MS Access转换为T-SQL:Sql server 将MS Access转换语句转换为T-SQL,sql-server,ms-access,pivot,transform,Sql Server,Ms Access,Pivot,Transform,我正在尝试将以下查询从MS Access转换为T-SQL: TRANSFORM COUNT(TableA.Primary) AS CountOfPrimary SELECT TableA.Id1 ,TableA.Id2 FROM TableA GROUP BY TableA.Id1, TableA.Id2 ORDER BY TableA.Id1 PIVOT TableA.Primary; 使用这个线程和其他资源,我已经了解了这两个独立的要点,我认为第一个case语句能够准确地工作,但是如何在
TRANSFORM COUNT(TableA.Primary) AS CountOfPrimary
SELECT
TableA.Id1
,TableA.Id2
FROM TableA
GROUP BY TableA.Id1, TableA.Id2
ORDER BY TableA.Id1
PIVOT TableA.Primary;
使用这个线程和其他资源,我已经了解了这两个独立的要点,我认为第一个case语句能够准确地工作,但是如何在T-SQL中创建pivot版本呢
SELECT DISTINCT
Id1
,Id2
,'1' = MAX(CASE WHEN Primary = '1' THEN 1 ELSE NULL END)
,'0' = MAX(CASE WHEN Primary = '0' THEN 1 ELSE NULL END)
FROM TableA
GROUP BY Id1, Id2
ORDER BY Id1
这是我的初始数据表:
.tg{
边界塌陷:塌陷;
边界间距:0;
}
.tg td{
字体系列:Arial,无衬线;
字体大小:14px;
填充:10px 5px;
边框样式:实心;
边框宽度:1px;
溢出:隐藏;
断字:正常;
边框颜色:黑色;
}
.tg th{
字体系列:Arial,无衬线;
字体大小:14px;
字体大小:正常;
填充:10px 5px;
边框样式:实心;
边框宽度:1px;
溢出:隐藏;
断字:正常;
边框颜色:黑色;
}
.tg.tg-0pky{
边框颜色:继承;
文本对齐:左对齐;
垂直对齐:顶部
}
Id1
Id2
主要的,重要的
8574
9401
1.
2154
5604
1.
3129
6255
1.
2714
7750
1.
3902
9585
1.
0535
6880
1.
0765
9401
1.
5946
9401
1.
7074
9585
1.
7181
9585
0
7181
9585
1.
8635
9401
1.
0334
4433
0
0334
4433
1.
0623
5604
1.
你很接近,而且在正确的轨道上。另外,在列名中使用保留关键字(如“Primary”)时要小心。看看下面的方法是否有效
DECLARE @tab TABLE (Id1 VARCHAR(10), Id2 VARCHAR(10), Pri INT)
INSERT @tab VALUES
('8574','9401',1),
('2154','5604',1),
('3129','6255',1),
('2714','7750',1),
('3902','9585',1),
('0535','6880',1),
('0765','9401',1),
('5946','9401',1),
('7074','9585',1),
('7181','9585',0),
('7181','9585',1),
('8635','9401',1),
('0334','4433',0),
('0334','4433',1),
('0623','5604',1)
SELECT Id1, Id2, [1], CASE WHEN [0] = 0 THEN NULL ELSE [0] END AS [0]
FROM (
SELECT
Id1
,Id2
,Pri
FROM @tab
) ts
PIVOT (
COUNT(Pri)
FOR Pri IN ([1],[0])
) pt
你能把示例数据和你想要的结果一起发布吗?@BJones我刚刚添加了代码片段,显示了初始数据和想要的结果
DECLARE @tab TABLE (Id1 VARCHAR(10), Id2 VARCHAR(10), Pri INT)
INSERT @tab VALUES
('8574','9401',1),
('2154','5604',1),
('3129','6255',1),
('2714','7750',1),
('3902','9585',1),
('0535','6880',1),
('0765','9401',1),
('5946','9401',1),
('7074','9585',1),
('7181','9585',0),
('7181','9585',1),
('8635','9401',1),
('0334','4433',0),
('0334','4433',1),
('0623','5604',1)
SELECT Id1, Id2, [1], CASE WHEN [0] = 0 THEN NULL ELSE [0] END AS [0]
FROM (
SELECT
Id1
,Id2
,Pri
FROM @tab
) ts
PIVOT (
COUNT(Pri)
FOR Pri IN ([1],[0])
) pt