我可以得到这方面的帮助,不知道如何实现这一目标。
我有一个包含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'结合所有
答案 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'