【问题标题】:Value in each column of table表格每一列的值
【发布时间】:2015-06-11 20:02:49
【问题描述】:

我可以得到帮助,不知道如何实现这一点。

我有一个 11 列的表格。

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

例如:直径--> DVALUE

     Width-- >  WVALUE

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

Result 1、result2 这些等于attribute_value 列。

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

例如:-

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

bolt 的值不应大于 130

坚果设计中只有 Acorn 的值是 ALLOW

结果

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

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

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

插入@table2 选择“5”联合所有 选择'8'并集所有

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    也许我理解错了,但是……

    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'
    

    【讨论】:

    • 别忘了,如果是螺帽设计,那么除了 Acorn 之外的任何值也应该被标记
    • 感谢 amcdermott,但我的主要问题是输出格式。如果任何属性值不符合条件,则其各自的属性应显示在输出中。
    • 我收到错误:在“何时”附近的预期条件的上下文中指定的非布尔类型表达式。
    • 对不起 - 当我真正尝试运行它时才发现它。现在更新。
    • 非常感谢 amcdermott。是否可以在 case 内编写子查询来检查其他表中存在的值,如果它在其他表中可用,那么它应该再次从输出中排除。例如:- 如果表 2 col1 包含 8 并且我想检查 8 是否可用于宽度。如果只有 8 个出现,则为空白。因为对于少数列,我需要检查另一个表(称为表 2 col 1),以检查违反的值。
    猜你喜欢
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多