2017-05-08 12 views
0

私はC#WinFormアプリケーションを作成しています。データはDataGridViewに表示されます。表Iは現在、私は私のようにクエリを改正することを考えていたSQL:1つのテーブルから複数の値を別々の列として選択する方法

PARTNUMBER|LOCATION|STOCKQTY 
Item 1 | A | 25 

を表示したいどのようなDGV

PARTNUMBER | LOCATION 
Item 1 | A 

に表示何

ITEMNO|VALUE|OPTFIELD 
Item 1|A|LOCATION 
Item 1|25|STOCKQTY 
Item 2|B|LOCATION 
Item 2|10|STOCKQTY 

例。

SELECT ITEMNO, VALUE, OPTFIELD, OPTFIELD AS STOCKQTY 
FROM ICITEMO 
WHERE ITEMNO = 'Item 1' and OPTFIELD LIKE 'LOCATION1' and OPTFIELD LIKE 'STOCKQTY' 

しかし、データが1列に含まれているとおり、これは何の結果

を返しません、どのように私は1つの列から来るにもかかわらず、別の列に別の値を表示していますか?

+0

は、選択中のケース式で、GROUP BYを実行します。リスト。 – jarlh

+0

このようにテーブルを設計する魅力的な理由がない限り、従来の正規化されたデザインに固執する方がよいでしょう。あなたの質問は、あなたがこの道を下った場合に経験する困難の良い例です。詳細については、「SQLキー値」または「エンティティ属性テーブル」に関するGoogleのバリエーションを参照してください。 – peterG

+0

残念ながら、テーブルデザインは変更できません。それはSage 300テーブルです。私が持っているものと仕事をしなければならない。現在のシステムでは部品番号と場所がわかりますが、ユーザーは在庫数量も必要になります。 –

答えて

0

あなたは、以下のような単純なピボットを使用することができます。

select * from #youritem 
pivot (max(value) for optfield in ([LOCATION],[STOCKQTY])) p 

あなたの出力:

+--------+----------+----------+ 
| itemno | LOCATION | STOCKQTY | 
+--------+----------+----------+ 
| Item 1 | A  |  25 | 
| Item 2 | B  |  10 | 
+--------+----------+----------+ 

ご入力テーブル:

create table #youritem (itemno varchar(10), value varchar(5), optfield varchar(20)) 

insert into #youritem 
(ITEMNO,VALUE, OPTFIELD) VALUES 
('Item 1','A ','LOCATION') 
,('Item 1','25','STOCKQTY') 
,('Item 2','B ','LOCATION') 
,('Item 2','10','STOCKQTY') 
+0

ありがとう、ピボットについて知りませんでした。完璧に動作します –

関連する問題