将不等行返回的查询组合到视图中

时间:2017-09-05 17:17:01

标签: sql-server

我有一个数据库表(名为:imitidx_sql),其中包含我公司所有50,000多个零件号的列表。包含此内容的列称为" item_no"。我想创建一个表的视图,该视图根据项目编号返回字段。例如,我希望视图中的字段标题为FloorAssembly,字段应包含100个左右的项目编号,如' 090-40 ___- '。在视图的下一个字段中,我想返回我的两个空数(应该大约10个左右),这些数字类似于' 557-05186 - '。到目前为止,我可以通过使用子查询

来实现这一目标
SELECT DISTINCT FloorAssemblyNumber, TwoVoid, ThreeVoid

FROM

(SELECT DISTINCT item_no AS FloorAssemblyNumber
FROM imitmidx_sql
WHERE item_no LIKE '090-40___-__')
AS FloorAssemblyNumber,

(SELECT DISTINCT item_no AS TwoVoid
FROM imitmidx_sql
WHERE item_no LIKE '557-05186-__')
AS TwoVoid,

(SELECT DISTINCT item_no AS ThreeVoid
FROM imitmidx_sql
WHERE item_no LIKE '557-05128-__')
AS ThreeVoid

或者我可以通过以下方式获得相同的结果:

SELECT a.item_no AS FloorAssemblyNumber, b.item_no AS TwoVoid, c.item_no AS ThreeVoid5

  FROM [002].[dbo].[imitmidx_sql]a , [002].[dbo].[imitmidx_sql]b, [002].[dbo].[imitmidx_sql]c

  WHERE a.item_no LIKE '090-40___-__' AND b.item_no LIKE '557-05186-__' AND c.item_no LIKE '557-05128-__'

但是,这两个查询似乎都返回了各个项目编号的所有可能组合。我想要的是选择所有不同的项目编号并在各自的列中(与其他列没有任何关系),如果选择了所有必需的数字,则显示空值。

示例数据:

item_no
090-30811-00  
090-30812-00  
090-40000-00  
090-40000-01  
090-40000-10  
090-40000-11  
090-40000-12  
090-40001-00  
557-05186-00  
557-05186-01  
557-05186-03  
557-05187-00  
557-05200-52  

预期结果:

FloorAssembly  |  TwoVoid     
090-40000-00   |  557-05186-00             
090-40000-01   |  557-05186-01             
090-40000-10   |  557-05186-03             
090-40000-11   |              
090-40000-12   |               
090-40001-00   |

我为糟糕的格式道歉,我是新来发布的。 谢谢你的时间,

FS

1 个答案:

答案 0 :(得分:0)

我认为Case声明可以为您服务。试试这个 -

SELECT DISTINCT CASE WHEN item_no LIKE '090-40___-__' THEN item_no ELSE NULL END AS FloorAssemblyNumber,
                CASE WHEN item_no LIKE '557-05186-__' THEN item_no ELSE NULL END AS TwoVoid,
                CASE WHEN item_no LIKE '557-05128-__' THEN item_no ELSE NULL END AS ThreeVoid
FROM imitmidx_sql

希望这有帮助。