에 내가 SQL과 그룹 동일한 레코드에 원하는 장소, 다음은 내가이 대신처럼되고 싶어 내 결과SQL 그룹 같은 값을 기록, 테이블
Name Code Qty
data1 AG 12
data1 AS 15
data2 MS 10
data2 IS 11
입니다.
Name Code Qty Code Qty
data1 AG 12 AS 15
data2 MS 10 IS 11
SQL로만 수행 할 수 있습니까?
에 내가 SQL과 그룹 동일한 레코드에 원하는 장소, 다음은 내가이 대신처럼되고 싶어 내 결과SQL 그룹 같은 값을 기록, 테이블
Name Code Qty
data1 AG 12
data1 AS 15
data2 MS 10
data2 IS 11
입니다.
Name Code Qty Code Qty
data1 AG 12 AS 15
data2 MS 10 IS 11
SQL로만 수행 할 수 있습니까?
SQL로만 수행 할 수 있습니까?
가변 개수의 열을 사용하면 동적으로 쿼리를 작성해야합니다. "SQL 전용"이라고 부르는 것이 거의 없지만 T-SQL로 수행 할 수 있으며 여기에는 한 가지 방법이 있습니다.
-- Sample table
declare @T table
(
Name varchar(5),
Code varchar(2),
Qty int
)
-- Sample data
insert into @T values
('data1', 'AG', 12),
('data1', 'AS', 15),
('data1', 'AQ', 17),
('data2', 'MS', 10),
('data2', 'IS', 11)
declare @XML xml
declare @SQL nvarchar(max)
declare @Max int
-- Max number of codes per name
select @Max = max(C)
from (select count(*) as C
from @T
group by Name) as T
-- Convert table to XML
set @XML = (select Name,
(select Code,
Qty
from @T as T2
where T1.Name = T2.Name
for xml path('c'), type)
from @T as T1
group by Name
for xml path('r'))
-- Build a dynamic query
;with Numbers(Number) as
(
select 1
union all
select Number + 1
from Numbers
where Number < @Max
)
select @SQL = 'select T.N.value(''Name[1]'', ''varchar(5)'') as Name ' +
(select ',T.N.value(''c['+cast(Number as nvarchar(10))+']/Code[1]'', ''char(2)'') as Code
,T.N.value(''c['+cast(Number as nvarchar(10))+']/Qty[1]'', ''int'') as Qty'
from Numbers
for xml path(''), type).value('.', 'nvarchar(max)') +
' from @xml.nodes(''/r'') as T(N)'
-- Execute query
exec sp_executesql @SQL, N'@xml xml', @XML
결과 :
Name Code Qty Code Qty Code Qty
----- ---- ----------- ---- ----------- ---- -----------
data1 AG 12 AS 15 AQ 17
data2 MS 10 IS 11 NULL NULL
여기보십시오 : http://data.stackexchange.com/stackoverflow/q/122860/
정확하게는 아닙니다. 하지만 각 레코드에 대해 Code, Qty 쌍을 하나의 값으로 연결하는 아이디어로 해킹 할 수 있습니다. 같은 이름을 가진 여러 열을 사용하여 수행 할 계획이 있는지 확신 할 수 없습니다.
할 수있는 ASP 코드가 있습니까? – JohnDoe4136
그 또 다른 질문 :) -하지만 일반적으로, 당신은 여전히 같은 이름과 동적 열의 여러 열을 갖는 문제를 해결할 필요가있을 것입니다. – sq33G
당신의 SQLServer를 사용하는 가정하면, 그래서 같은 이름의 그룹과 각 코드에 일련 번호를 할당 순위를 사용할 수 있습니다
select Name, Code, Qty, Rank() OVER (PARTITION BY Name ORDER BY Code) AS CodeRank
from MyTable
은 그럼 당신은 SQLServer에 또는 SSRS에 하나 내에서 피벗 기능을 사용할 수 있습니다 이것을 필요에 따라 포맷하십시오.
당신은 무엇을 같은'Name'에서 세 가지 기록이 있다면 할 것? – sq33G
두 개가 아닌 세 개의 다른 코드가있는 것을 제외하고는 똑같은 것입니다. – JohnDoe4136
그룹별로 다른 행을 가로로 나열하려고합니까? data1에 7-8 개의 다른 행이 있고 data2에 1-2 개의 레코드가있는 경우 시나리오를 제공하십시오. –