2017-11-07 8 views
1

行の値を行と列に並べて並べて表示し、セル内でコンマで区切った2つの値を連結する必要があります。以下の例を参照してください。どんな助けもありがたいです。PIVOT行の値を行と列に並べて動的に連結し、セル内でコンマで区切られた2つの値を連結します。

Table1 

Toys CostPrice SellingPrice 
---- --------- ------------- 
A  10.55  12.60 
B  7.60  8.90 
C  8.90  10.50 
D  11.50  13.40 
E  17.50  20.30 
F  2.57  3.50 

この形式で表示する必要があります。ありがとう。

Toys A    B   C   D   E   F 
---- -----   -------  ----   ---   ----  --- 
A  10.55,12.60 
B     7.60,8.90 
C        8.90,10.50 
D           11.50,13.40 
E              17.50,20.30 
F                 2.57,3.50 
+1

SQLでは単純ではありません... SQLは、データ取得層であり、表示層ではありません。最も簡単な方法です。これは 結果をExcelにエクスポートし、それをピボットさせます。あなたは純粋なSQLの答えをしたい場合、この質問は毎日約10回ここに来る....答えのサイトを検索してください。 – Twelfth

+0

どのdbms ???????? – Eric

+0

Microsoft SQL 2012 – Etex

答えて

0

もう一度、もう一度!まず、例のテーブル変数の代わりにTemp Tableを作成したことに気づくでしょう。@tablecolumns変数はそれを必要としています。本当にあなたには当てはまりませんが、それを再生するコードをコピー/ペーストすれば、私が気づいた変更でした。

@tablecolumnsは、必要な動的なピースです。ピボットテーブルの場合、この "[A]、[B]、[C] ...."のようになります。

これで、動的SQLとしてクエリを実行して、@ tablecolumns変数に正しく挿入する必要があります。 (実際のクエリが取得ビューでクエリ自体を入れて、あなたの代わりにビューから必要なものを連結/選択するように決定することができる方法を集中的に応じて、私は時々、それは簡単です、動的SQLは少し奇妙見つける。)

create table #toystab (Toys nvarchar(1), Cost decimal (5,2), Sell decimal (5,2)) 

insert into #toystab values ('A', 5.50, 6.60) 
insert into #toystab values ('B', 6.50, 7.60) 
insert into #toystab values ('C', 7.50, 8.60) 
insert into #toystab values ('D', 8.50, 9.60) 
insert into #toystab values ('E', 11.50, 12.60) 
insert into #toystab values ('F', 13.50, 14.60) 

DECLARE @tablecolumns nvarchar(max) 
select @tablecolumns = (COALESCE(@tablecolumns +',', '') 
         + '[' + convert(nvarchar(10), #Toystab.Toys) +']') 
from #toystab 


declare @Query nvarchar(max) 
set @Query = ' 
select * 
from (
select Toys Toy1, Toys ToyName, 
CONCAT(cast(Cost as varchar(10)), '','', cast(Sell as varchar(10))) as [ConcatenatedPrice] 
from #toystab) Toyz 

pivot 
(
MAX(ConcatenatedPrice) 
for Toy1 in (' + @tablecolumns+ ') 
) 
as [Pivot] 
' 
exec(@Query) 

drop table #toystab 

いくつか注意してください。最初に、私はToysカラムを2回、ピボットするには1回、そしてまだカラムになるように1回選択します。第2に、CONCATステートメントで区切り記号 ''、 ''は引用符( ")ではなく、2つのアポストロフィ( '')です。

+0

一部のISNULLでクリーンアップしてNULL回答を空白にすることができます。 – BWoods

+0

Bwoodsありがとう。あなたの書式は私が欲しかったものですが、毎回何匹のおもちゃの名前がわからないので、列の横と下の列にToy名を動的にする必要があります。最初の月と翌月はAからFまでですが、それはAからZまでです。また、おもちゃの名前は常にアルファベットではないかもしれません。私はAからFを使用しました。例えば、実際の名前は異なっています。それを動的に行う方法があるかどうかを教えてください。ありがとう。 – Etex

+0

あなたは質問を更新して以来、私は最近同様のことをしました。私はチャンスを得たときに私の答えを更新します。 – BWoods

0

あなたのフォーマットは私が欲しかったものですが、どのように私が望んでいたかはわかりません。私が毎回持っている多くのおもちゃの名前。最初の月と次の月にはAからFまで、AからZになることができます。また、おもちゃの名前は常にアルファベットではないかもしれません。

関連する問題