SQL Server:重新排列并展平值表?

时间:2014-03-24 22:01:21

标签: sql-server stored-procedures

我正在处理一个从我的数据库中检索某些值的存储过程。

我能够获得我需要的价值,但是我很难找到如何以我需要的方式订购它们。

以下是我想要实现的目标。我已经有了表属性(左),需要通过在属性上运行SELECT来创建表newProperties。

请注意:

  • 字段 valueTypeID 将始终为68或80。
  • 字段永远不会相同。每个值都是一个长字符串,每个值都会更改(我已经简化了我的问题)

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为这应该是SELECT语句的起点:

select
  p.genericID,
  p68.Value as ValueTypeId68,
  p80.Value as ValueTypeId80
from partials p
join partialsProps p68
  on p.genericId = p68.genericId
  and p68.valueTypeID = 68
join partialsProps p80
  on p.genericId = p80.genericId
  and p80.valueTypeID = 80

您可以在其上添加@cycle@clientAccountID条件。

SQL小提琴:http://www.sqlfiddle.com/#!6/472de/1

答案 1 :(得分:0)

列值valueID的68和80是唯一可能的值吗?如果是这样,那么w0lf提供的答案应该适合你,虽然我不会说它是唯一的解决方案。

但是,如果除了60和80之外还有valueTypeID的多个值,那么我想在此提出一个解决方案。

我假设您在列值中有数字和非数字值,但您遇到的问题是数字和非数字值汇集在一个列中,因此您希望将它们分开。这是我想象的场景。

注意:如果这不能为您提供满意的解决方案,请详细提供该方案。

GO to SQLFiddle

-- Create table as you have provided in the question

CREATE TABLE #partials
([genericID] int);

INSERT INTO #partials ([genericID])
VALUES (11),(12),(13),(14);



CREATE TABLE #partialsProps
([genericID] int, [valueTypeID] int, [Value] varchar(1));

-- Insert values similar 

INSERT INTO #partialsProps
([genericID], [valueTypeID], [Value])
VALUES
(11, 68, 'A'),
(11, 80, '1'),
(12, 68, 'Z'),
(12, 80, '2'),
(13, 68, 'B'),
(13, 80, '3'),
(14, 68, 'Y'),
(14, 80, '4')

select r1.value as Val1,r2.Value as Val2 from 
(select pp.genericID,value, valueTypeID from #partialsProps pp join #partials p on    
       p.genericID = pp.genericID
   where ISNUMERIC(Value) = 0 group by valueTypeID, value ,pp.genericID) r1
join
(select pp.genericID,value, valueTypeID from #partialsProps pp join #partials p on 
        p.genericID = pp.genericID
   where ISNUMERIC(Value) = 1 group by valueTypeID, value ,pp.genericID) r2
   on r1.genericID = r2.genericID ;

 drop table #partials;
 drop table #partialsProps;