2017-05-08 97 views
0

我正在编写一个C#WinForm应用程序,数据显示在DataGridView中。SQL:如何从一个表中选择多个值作为单独列

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

的例子我在DGV

PARTNUMBER | LOCATION 
Item 1 | A 

我想显示

PARTNUMBER|LOCATION|STOCKQTY 
Item 1 | A | 25 

我想修改查询作为目前什么显示;

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

但这不返回任何结果

由于数据包含在一列,如何显示在单独的列单独的值,尽管从一列来的?

+0

做一个GROUP BY,在select case语句名单。 – jarlh

+0

除非以这种方式设计桌子有令人信服的理由,否则最好使用传统标准化设计。如果你顺着这条路走下去,你的问题就是一个很好的例子。 Google对“SQL键值”或“实体属性表”的更多信息。 – 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

谢谢,不知道枢轴。完美的作品 –