に私は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で行うことができます。ここでは1つの方法です。
-- 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
ここで試してみてください:同じ `name`の下の3つのレコードがあった場合http://data.stackexchange.com/stackoverflow/q/122860/
正確ではありません。あなたは、多くのコード、数のペアを各レコードの単一の値に連結するというアイデアでハックすることができます。たとえそのようなことが可能であったとしても、同じ名前の複数の列を使って何をする予定ですか。
これを行うことができるかもしれないASPコードはありますか? – JohnDoe4136
これは別の質問です:)しかし、一般的には、同じ名前の複数の列と動的な列数を持つという問題を回避する必要があります。 – sq33G
あなたがのSQLServerを使用している、あなたがそうのように、名前のグループと各コードに連番を割り当てるためにランクを使用したと仮定すると:
select Name, Code, Qty, Rank() OVER (PARTITION BY Name ORDER BY Code) AS CodeRank
from MyTable
次にあなたがSQLServerのか、SSRSのいずれかの中にピボット機能を使用することができますこれを必要に応じてフォーマットします。
あなたは何をしますか? – sq33G
同じことを除いて、2つのコードの代わりに3つの異なるコードがあります。 – JohnDoe4136
グループごとに異なる行を横に並べて表示しようとしていますか? data1に7-8の異なる行があり、data2に1〜2のレコードがある場合のシナリオを与えます。 –