2011-05-28 70 views
1

我有如下返回结果的看法:如何从SQL Server 2005中的列值查找表的列名?

 D1  D2  D3  D1_CODE  D2_CODE  D3_CODE 
    ---- ---- ---- ---------  --------- --------- 
    10.00 13.00 14.00  OD   LENGTH  THICKNESS 

我创建了下面的选择查询视图,

SELECT 
     MKT_MRL_Detail.D1, 
     MKT_MRL_Detail.D2, 
     MKT_MRL_Detail.D3, 
     MAS_SizeType.D1_Code, 
     MAS_SizeType.D2_Code, 
     MAS_SizeType.D3_Code 
FROM 
     MKT_MRL_Detail INNER JOIN 
     STR_Item ON STR_Item.ItemID = MKT_MRL_Detail.ItemID INNER JOIN 
     MAS_SizeType ON MAS_SizeType.SizeTypeID = STR_Item.SizeTypeID 

我返回基于内部视图加入的两个表。 上述视图只返回一行。在这里,我想找到哪个列的值为'LENGTH': 我正在使用SQL Server 2005.任何人都可以帮忙吗?

+0

您无权查看视图的内容?!在管理工作室中,右键单击视图名称并选择编辑。 – 2011-05-28 05:25:32

+0

你好。不要认为它是一个视图。请考虑将它作为基于两个表的内部连接的选择。在这种情况下,我们可以找到? – thevan 2011-05-28 05:28:45

+0

嗨小马:我编辑了我的问题,请看看它。 – thevan 2011-05-28 05:35:16

回答

1

我最好的建议是重写视图(甚至可能是数据库),因为这不是一个很好的设计。但是,我怀疑这是可能的。如果不是,这里是我的建议:

SELECT * 
FROM (
SELECT D1 AS Value, D1_CODE AS Code 
FROM view 
UNION ALL 
SELECT D2, D2_CODE 
FROM view 
UNION ALL 
SELECT D3, D3_CODE 
FROM view 
) AS myInfo 
WHERE Code='LENGTH' 

它不是很漂亮,但它会完成工作。

+0

HI Biggs,非常感谢。它的工作..... – thevan 2011-05-28 08:05:41

+0

我也会测试在每个select语句中放置WHERE语句。它更简单,但如果你决定返回大量记录而不是一个,它会表现得更好。但是,在这种情况下,性能差异不保证这样做。 – IAmTimCorey 2011-05-28 14:12:19

+0

OK比格斯。但是你的第一个解决方案非常适合我的问题。 – thevan 2011-05-30 06:53:52

相关问题