2011-02-26 33 views
1

我需要SQL Server中的表中所有不同值的函數。在SQL Server中查找表中所有不同值的函數

例如,如果我的表看起來像這樣:

field1 | field2 | ... | field8 
---------+----------+-----+--------- 
valuef11 | valuef21 | ... | valuef81 
valuef12 | valuef22 | ... | valuef82 
etc... 

然後,我需要返回表2個字段如下:

field1 valuef11 
field1 valuef12 
field1 valuef13 
field2 valuef21 
field2 valuef22 
.... 
field8 valuef81 
field8 valuef82 
field8 valuef83 
field8 valuef84 
+0

您使用的是哪個版本的SQL Server? – 2011-02-26 08:56:11

+0

sql server 2008 – jozi 2011-02-26 09:00:52

回答

2

認爲您正在尋找這樣的:

SELECT DISTINCT 'field1' AS fieldname, field1 FROM yourtable 
UNION ALL 
SELECT DISTINCT 'field2' AS fieldname, field2 FROM yourtable 
UNION ALL 
... 
UNION ALL 
SELECT DISTINCT 'field8' AS fieldname, field8 FROM yourtable 

注意,這個假設所有字段具有相同類型。

在SQL Server 2005或更高版本,你也可以使用UNPIVOT

SELECT DISTINCT fieldname, fieldvalue 
FROM yourtable 
UNPIVOT(fieldvalue FOR fieldname IN 
    (field1, field2, ..., field8) 
) AS unpvt; 

再次,這假定所有字段具有相同類型。

+0

你的答案我很好,但我需要自動生成此表,因爲類似輸出的類似表格對我來說非常可重用 – jozi 2011-02-26 07:56:07

+0

@jozi:坦率地說,這聽起來像是一個非常糟糕的主意。你能解釋爲什麼你需要它嗎? – 2011-02-26 08:13:13

+0

我需要一個存儲過程通過輸入表名稱和輸出表中我的解釋 – jozi 2011-02-26 08:15:35

0

要基於8個字段和不同顯示2個字段。

如果你這樣做,你將有重複對。那是你要的嗎?或者你想做一個「分組依據」條款?

乾杯!

1

你可以使用一個union包裹在一個distinct子查詢:

select distinct A 
,  B 
from ( 
     select field1 as A, field11 as B from YourTable 
     union all 
     select field1, field12 from YourTable 
     union all 
     select field1, field13 from YourTable 
     union all 
     select field2, field21 from YourTable 
     union all 
     select field2, field22 from YourTable 
     ) as SubQueryAlias 

如果你的第一場總是6個charachters長,和你的第二個字段始終7,就可以產生這樣的查詢:

declare @sql varchar(max) 

select @sql = case 
      when @sql is null then 'select ' + a.name + ' as a, ' + b.name + 
       ' as b from TestTable ' 
      else @sql + 'union all select ' + a.name + ', ' + b.name + 
       ' from TestTable ' 
      end 
from sys.all_columns a 
join sys.all_columns b 
on  len(b.name) = 7 
     and substring(b.name,1,6) = a.name 
     and b.object_id = a.object_id 
where a.object_id = object_id('TestTable') 

set @sql = 'select distinct a, b from (' + @sql + ') as SubQueryAlias' 

exec (@sql) 
+0

如果我的表格和我的字段發生了變化,需要覆蓋此代碼但我不會 – jozi 2011-02-26 08:05:26

+0

@jozi:一種方法添加,但我會盡量避免這種生產數據庫 – Andomar 2011-02-26 08:15:20

+0

我運行它,並改變TestTable但不工作 – jozi 2011-02-26 08:22:52

相關問題