我想按某些列按表分组并显示其他列的值。在 SQL v.2017 中我可以使用 string_agg 函数来做到这一点。但我的 SQL 版本是 2012。我该怎么做...
create table dbo.TaskPeriods
(
[id] [int] NULL,
[startDate] [datetime] NULL,
[endDate] [datetime] NULL
)
-------------------------------
insert into test.dbo.TaskPeriods values(1,'2018-07-24 00:00:00.000','2018-07-24 10:00:00.000')
insert into test.dbo.TaskPeriods values(2,'2018-07-24 00:00:00.000','2018-07-24 10:00:00.000')
insert into test.dbo.TaskPeriods values(3,'2018-07-24 08:00:00.000','2018-07-24 12:00:00.000')
--------------------------------------------------------
select id,startDate,endDate from test.dbo.TaskPeriods
--------------------------------------------------------
select
min (startDate)
,max (endDate)
--,string_agg(id,',') //How to Do this Without string_agg Function
FROM test.dbo.TaskPeriods
group by startDate,endDate
Run Code Online (Sandbox Code Playgroud)
有没有办法将一个特定列与 SQL Server 12.0 中的另一组列连接起来?
架构
CREATE TABLE person
(
[first_name] VARCHAR(10),
[surname] VARCHAR(10),
[dob] DATE,
[person_id] INT
);
INSERT INTO person ([first_name], [surname], [dob] ,[person_id])
VALUES
('Alice', 'AA', '1/1/1960', 1),
('Bob' , 'AA', '1/1/1980', 2),
('Carol', 'AA', '1/1/2018', 3),
('Dave' , 'BB', '1/1/1960', 4),
('Elsa', ' BB', '1/1/1980', 5),
('Fred' , 'BB', '1/1/1990', 6),
('Gina' , 'BB', '1/1/2018', 7);
CREATE TABLE person_membership
(
[person_id] INT,
[personstatus] VARCHAR(1),
[membership_id] INT,
[relationship] INT
);
INSERT INTO person_membership ([person_id], [personstatus], [membership_id], [relationship])
VALUES
(1, 'A', 10, 1), …Run Code Online (Sandbox Code Playgroud) 我在 Windows 上使用 SQL Server 2017 Microsoft SQL Server 2017 (RTM-GDR) (KB4583456) - 14.0.2037.2 (X64) 2020 年 11 月 2 日 19:19:59 版权所有 (C) 2017 Microsoft Corporation Developer Edition(64 位) 10 Pro 10.0(内部版本 19042:)。
我正在尝试对 STRING_AGG 函数的结果进行排序。
这很好用
SELECT STRING_AGG(Category,', ') AS Result
FROM LegacyReviews_Categories
Run Code Online (Sandbox Code Playgroud)
这给了我错误“Msg 102,Level 15,State 1,Line 1 '('附近的语法不正确。”
SELECT STRING_AGG(Category,', ') WITHIN GROUP ( ORDER BY Category ASC) AS Result
FROM LegacyReviews_Categories
Run Code Online (Sandbox Code Playgroud) 我的桌子看起来像这样
Color Order
------------
Red 49
Blue 32
Green 80
Green 30
Blue 93
Blue 77
Red 20
Green 54
Red 59
Red 42
Red 81
Green 35
Blue 91
Run Code Online (Sandbox Code Playgroud)
我的查询是
SELECT Color, Count(*) AS Count, STRING_AGG(Order,',') AS AggOrder
FROM MyTable
GROUP BY Color
Run Code Online (Sandbox Code Playgroud)
当我按颜色分组并聚合时,我得到未排序的订单
像这样的东西
Color Count AggOrder
------------------------------
Red 5 49,20,59,42,81
Blue 4 32,93,77,91
Green 4 80,30,54,35
Run Code Online (Sandbox Code Playgroud)
问题:AggOrder 无序 49,20,59,42,81
我想订购
所以最终结果是
Color Count AggOrder
------------------------------
Red 5 20,42,49,59,81
Blue 4 32,77,91,93
Green 4 30,35,54,80
Run Code Online (Sandbox Code Playgroud)
我尝试了这个查询
SELECT Color, …Run Code Online (Sandbox Code Playgroud)