我想與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
不完全。不過,您可以嘗試將大量代碼,數量對連接成每個記錄的單個值。我不確定你打算如何處理多個同名的列,即使這樣的事情是可能的。
有沒有可以做到這一點的asp代碼? – JohnDoe4136 2011-12-29 09:21:28
這是另一個問題:) - 但通常情況下,您仍然需要解決具有多個具有相同名稱的列和動態數量的列的問題。 – sq33G 2011-12-29 09:27:30
假設使用的是SQLServer的,可以使用秩到順序號分配給具有名稱組的各代碼,例如:
select Name, Code, Qty, Rank() OVER (PARTITION BY Name ORDER BY Code) AS CodeRank
from MyTable
然後,你可以SQLServer的或SSRS到內使用樞軸功能按要求格式化。
你會怎麼做,如果有下一樣'Name'三個記錄? – sq33G 2011-12-29 08:44:24
同樣的事情,除了會有三個不同的代碼而不是兩個等等。 – JohnDoe4136 2011-12-29 08:56:18
你是否試圖列出水平不同的行按組?如果data1具有7-8個不同的行並且data2具有1-2個記錄,則提供場景。 – 2011-12-29 09:35:25