时间:2015-06-11 10:33:07

标签: sql sql-server tsql

我可以得到这方面的帮助,不知道如何实现这一目标。

我有一个包含11列的表。

第2列到第10列由特定属性和attribute_value组成。

例如:Diameter - > DVALUE

     Width-- >  WVALUE

结果集应包含结果1 |结果2 |结果3 ......

结果1,result2等于attribute_value列。

我需要知道属性值列中的任何数据是否无效,那么特定属性应该在相应的Result列中输出。

例如: -

SKU      ,Diameter  ,DVALUE ,Width  ,WVALUE ,Bolt 1 ,Bolt_1_VALUE   ,Bolt 2 ,Bolt2_VALUE    ,Nut Design ,Nut_Design_VALUE
AR105    ,Diameter  ,68     ,Width  ,10     ,Bolt 1 ,114.3          ,Bolt 2 ,NULL           ,Nut Design ,Acorn
AR105MB  ,Diameter  ,18     ,Width  ,10     ,Bolt 1 ,114.3          ,Bolt 2 ,NULL           ,Nut Design ,Acorn
M8861A   ,Diameter  ,22     ,Width  ,8      ,Bolt 1 ,150.1          ,Bolt 2 ,NULL           ,Nut Design ,Acorn
RAR105M8 ,Diameter  ,18     ,Width  ,8      ,Bolt 1 ,120.7          ,Bolt 2 ,NULL           ,Nut Design ,Biscuit
ZM8865A  ,Diameter  ,18     ,Width  ,8      ,Bolt 1 ,114.3          ,Bolt 2 ,NULL           ,Nut Design ,Acorn

以下条件用于检查属性值

中的数据

直径值不应大于20

宽度值不应大于10

螺栓的值不应大于130

在坚果设计中只有值Acorn是值得的

结果

Result1 ,Result2,   Result3,    Result4,    Result5
Diameter,'',        '',         '',         ''

'',      '',        '',         '',         ''  

'Diameter','',     'Bolt 1',   '',          ''  

'',       '',       '',        '',          Nut Design


DECLARE @TABLE TABLE
(
SKU VARCHAR (50),
Diameter VARCHAR (50),
DVALUE VARCHAR (50),
Width VARCHAR (50),
WVALUE VARCHAR (50),
Bolt1 VARCHAR (50),
Bolt_1_VALUE VARCHAR (50),
Bolt2 VARCHAR (50),
Bolt2_VALUE VARCHAR (50),
NutDesign VARCHAR (50),
Nut_Design_VALUE VARCHAR (50)
)

INSERT @TABLE

SELECT 'AR105'   ,'Diameter'    ,'68'       ,'Width'    ,'10'       ,'Bolt 1'   ,'114.3'            ,'Bolt 2'   ,NULL           ,'Nut Design'   ,'Acorn' UNION ALL
SELECT 'AR105MB','Diameter' ,'18'       ,'Width'    ,'10'       ,'Bolt 1'   ,'114.3 '        ,   'Bolt 2'   ,NULL           ,'Nut Design'   ,'Acorn' UNION ALL
SELECT 'M8861A' ,'Diameter' ,'22'       ,'Width'    ,'8'        ,'Bolt 1'   ,'150.1'            ,'Bolt 2'   ,NULL           ,'Nut Design'   ,'Acorn' UNION ALL
SELECT 'RAR105M8','Diameter'    ,'18'       ,'Width'    ,'8'        ,'Bolt 1'   ,'120.7'            ,'Bolt 2'   ,NULL           ,'Nut Design'   ,'Biscuit' UNION ALL
SELECT 'ZM8865A' ,'Diameter'    ,'18'       ,'Width'    ,'9'        ,'Bolt 1'   ,'114.3'            ,'Bolt 2'   ,NULL           ,'Nut Design'   ,'Acorn'

SELECT * FROM @TABLE

对于宽度,我们需要检查其他table2,如果表1中存在的值而表2中没有,那么它应该在输出中。

声明@ table2表 ( 宽度varchar(50) )

插入@ table2 选择'5'联盟全部 选择'8'结合所有

1 个答案:

答案 0 :(得分:0)

也许我误解了这个但是......

Select * 
  from table
 where diameter > 20
    or width > 10
    or bolt > 130

修改:根据您的评论,我的理解是您只希望查看违反这些限制的值以及所有其他列的空白。在这种情况下,类似下面的内容将起到作用

SELECT SKU, 
       Case when dvalue > 20 then 'Diameter' else '' end,
       Case when dvalue > 20 then DValue else '' end, 
       Case when wvalue > 10 then 'Width' else '' end,
       Case when wvalue > 10 then WValue else '' end,
       Case when bolt_1_value > 130.0 then 'bolt_1_value' else '' end,
       Case when bolt_1_value > 130.0 then bolt_1_value else '' end,
       Case nut_design_Value when 'Acorn' then '' else 'nut_design_Value'  end ,
       Case nut_design_Value when 'Acorn' then '' else nut_design_Value  end 
  FROM @TABLE
 WHERE dvalue > 20
    OR wvalue > 10
    OR bolt_1_value > 130.0
    or nut_design_Value <>  'Acorn'

编辑2:因此,如果我理解正确,您希望包含宽度大于10 的行,其中wvalue字段中的值为第二张表中不存在?如果我有正确的话,那么这应该为你做好准备....

SELECT SKU, 
       Case when dvalue > 20 then 'Diameter' else '' end,
       Case when dvalue > 20 then DValue else '' end, 
       Case when wvalue > 10 or t2.Width is null then 'Width' else '' end,
       Case when wvalue > 10 or t2.Width is null then WValue else '' end,
       Case when bolt_1_value > 130.0 then 'bolt_1_value' else '' end,
       Case when bolt_1_value > 130.0 then bolt_1_value else '' end,
       Case nut_design_Value when 'Acorn' then '' else 'nut_design_Value'  end ,
       Case nut_design_Value when 'Acorn' then '' else nut_design_Value  end
  FROM @TABLE t1
  LEFT JOIN @TABLE2 t2 on t1.wvalue = t2.width
 WHERE dvalue > 20
    OR wvalue > 10
    or t2.Width is null
    OR bolt_1_value > 130.0
    or nut_design_Value <>  'Acorn'