일부 SQL (SQL 서버 2008 용)을 만드는 데 문제가 있습니다.기존 테이블의 그룹화 된 하위 문자열에서 새 테이블 만들기
: 나는 그 ID와 함께 첫 번째 작업으로 그룹을 새로운 테이블을 구축을 위해 노력하고Id = 1, LongTaskName = "a,b,c"
Id = 2, LongTaskName = "a,c"
Id = 3, LongTaskName = "b,c"
Id = 4, LongTaskName = "a"
etc...
:
나는 쉼표로 구분 작업 우선 순위 정렬 작업 테이블이
foreach(var t in Tasks)
{
var gt = new GroupedTasks();
gt.TaskId = t.Id;
var firstWord = t.LongTaskName.Split(',');
if(firstWord.Count() > 0)
{
gt.GroupName = firstWord.First();
}
else
{
gt.GroupName = t.LongTaskName;
}
GroupedTasks.InsertOnSubmit(gt);
}
나는를 공격 할 수있는 SQL 함수를 썼다 : 여기
GroupName: "a", TaskId: 1
GroupName: "a", TaskId: 2
GroupName: "a", TaskId: 4
GroupName: "b", TaskId: 3
는 순진, 천천히, LINQ 코드 분할 수 :
create function fn_Split(
@String nvarchar (4000),
@Delimiter nvarchar (10)
)
returns nvarchar(4000)
begin
declare @FirstComma int
set @FirstComma = charindex(@Delimiter,@String)
if(@FirstComma = 0)
return @String
return substring(@String, 0, @FirstComma)
end
go
그러나 실제 SQL을 사용하여 작업을 수행하고 있습니다.
SELECT dbo.fn_Split(LongTaskName, ',')
FROM [dbo].[Tasks]
GROUP BY dbo.fn_Split(LongTaskName, ',')
을 그리고 나는 이런 식으로 뭔가 머리를 아래로 할 필요가 알고 : 혼자하여 그룹을 얻을 수
DECLARE @RowSet TABLE (GroupName nvarchar(1024), Id nvarchar(5))
insert into @RowSet
select ???
FROM [dbo].Tasks as T
INNER JOIN
(
SELECT dbo.fn_Split(LongTaskName, ',')
FROM [dbo].[Tasks]
GROUP BY dbo.fn_Split(LongTaskName, ',')
) G
ON T.??? = G.???
ORDER BY ???
INSERT INTO dbo.GroupedTasks(GroupName, Id)
select * from @RowSet
을하지만 꽤 그룹화 된 관계를 참조하고 혼란 스러워요하는 방법 groking하고 있지 않다 여러 번 전화를 걸지 않아도됩니다.
의견이 있으십니까?
와우, 좋은. 문제는 실제로 이루어집니다. 그것은 내가 일하고있는 일회성 수입 문제의 단순화 된 버전입니다, 그래서 다시하지 않아도됩니다. 그러나 당신의 훌륭한 대답과 그 잠재적 인 문제를 지적 해 주셔서 너무 감사드립니다! – teleball