从相当大的SQL Server表中删除重复行的最佳方法是什么(即300,000多行)?
当然,由于RowID身份字段的存在,行不会是完美的重复.
MyTable的
RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
Run Code Online (Sandbox Code Playgroud) 使用MySQL,我可以这样做:
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
Run Code Online (Sandbox Code Playgroud)
我的输出:
shopping
fishing
coding
Run Code Online (Sandbox Code Playgroud)
但相反,我只想要1行,1 col:
预期产出:
shopping, fishing, coding
Run Code Online (Sandbox Code Playgroud)
原因是我从多个表中选择了多个值,并且在所有连接之后我有了比我想要的更多的行.
我在MySQL Doc上寻找了一个函数,它看起来不像CONCAT或CONCAT_WS函数接受结果集,所以这里的任何人都知道如何做到这一点吗?
如何得到:
id Name Value
1 A 4
1 B 8
2 C 9
Run Code Online (Sandbox Code Playgroud)
至
id Column
1 A:4, B:8
2 C:9
Run Code Online (Sandbox Code Playgroud) 为了说明,假设我有两个表如下:
VehicleID Name
1 Chuck
2 Larry
LocationID VehicleID City
1 1 New York
2 1 Seattle
3 1 Vancouver
4 2 Los Angeles
5 2 Houston
Run Code Online (Sandbox Code Playgroud)
我想写一个查询来返回以下结果:
VehicleID Name Locations
1 Chuck New York, Seattle, Vancouver
2 Larry Los Angeles, Houston
Run Code Online (Sandbox Code Playgroud)
我知道这可以使用服务器端游标完成,即:
DECLARE @VehicleID int
DECLARE @VehicleName varchar(100)
DECLARE @LocationCity varchar(100)
DECLARE @Locations varchar(4000)
DECLARE @Results TABLE
(
VehicleID int
Name varchar(100)
Locations varchar(4000)
)
DECLARE VehiclesCursor CURSOR FOR
SELECT
[VehicleID]
, [Name]
FROM [Vehicles]
OPEN VehiclesCursor
FETCH NEXT …Run Code Online (Sandbox Code Playgroud) 我有一张桌子如下:
ID User Activity PageURL
1 Me act1 ab
2 Me act1 cd
3 You act2 xy
4 You act2 st
Run Code Online (Sandbox Code Playgroud)
我希望按用户和活动进行分组,这样我最终得到的结果如下:
User Activity PageURL
Me act1 ab, cd
You act2 xy, st
Run Code Online (Sandbox Code Playgroud)
如您所见,列PageURL由基于group by的逗号分隔在一起.
真的很感激任何指针和建议.
我想在SQL Server中创建一个表值函数,我想以逗号分隔值返回数据.
例如表格: tbl
ID | Value
---+-------
1 | 100
1 | 200
1 | 300
1 | 400
Run Code Online (Sandbox Code Playgroud)
现在,当我使用该函数执行查询时 Func1(value)
SELECT Func1(Value)
FROM tbl
WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)
我想要的输出是: 100,200,300,400
我有一个我正在查询的视图,看起来像这样:
Run Code Online (Sandbox Code Playgroud)BuildingName PollNumber ------------ ---------- Foo Centre 12 Foo Centre 13 Foo Centre 14 Bar Hall 15 Bar Hall 16 Baz School 17
我需要编写一个将BuildingNames组合在一起的查询,并显示一个PollNumbers列表,如下所示:
Run Code Online (Sandbox Code Playgroud)BuildingName PollNumbers ------------ ----------- Foo Centre 12, 13, 14 Bar Hall 15, 16 Baz School 17
我怎么能在T-SQL中做到这一点?我宁愿不为此写一个存储过程,因为它看起来有点矫枉过正,但我不是一个数据库人.看起来像SUM()或AVG()这样的聚合函数是我需要的,但我不知道T-SQL是否有一个.我正在使用SQL Server 2005.
t-sql sql-server group-by sql-server-2005 aggregate-functions
如果我发出SELECT username FROM Users我得到这个结果:
username -------- Paul John Mary
但我真正需要的是一个行与所有以逗号分隔值,如下所示:
Paul, John, Mary
我该怎么做呢?
我试图在我的SQL Server数据库中合并这样的东西:
[TicketID], [Person] T0001 Alice T0001 Bob T0002 Catherine T0002 Doug T0003 Elaine
进入:
[TicketID], [People] T0001 Alice, Bob T0002 Catherine, Doug T0003 Elaine
我需要在SQL Server和Oracle中执行此操作.
我发现GROUP_CONCATMySQL 的功能完全符合我的需要,但MySQL不是一个选项.
编辑:测试台:
DECLARE @Tickets TABLE (
[TicketID] char(5) NOT NULL,
[Person] nvarchar(15) NOT NULL
)
INSERT INTO @Tickets VALUES
('T0001', 'Alice'),
('T0001', 'Bob'),
('T0002', 'Catherine'),
('T0002', 'Doug'),
('T0003', 'Elaine')
SELECT * FROM @Tickets
Run Code Online (Sandbox Code Playgroud) 什么是格式化输出的TSQL语法,以便列值显示为字符串,用逗号分隔.
例如,我的表CARS具有以下内容:
CarID CarName
----------------
1 Porsche
2 Mercedes
3 Ferrari
Run Code Online (Sandbox Code Playgroud)
我如何获得汽车名称: Porsche, Mercedes, Ferrari
sql-server ×8
sql ×6
t-sql ×5
group-by ×2
concat ×1
csv ×1
duplicates ×1
group-concat ×1
mysql ×1
rows ×1