2012-05-23 59 views
3

這基本上是一個數據庫連接問題,但它需要使用列名映射組件,這讓我難倒了。sql連接函數

我有多個調查表;爲了簡單起見,假設我有兩個,一個是2010年(稱爲'd2010'),另一個是2011年(稱爲'd2011')。這些行對應於調查和列(我們可以假設爲'c1','c2','c3',...'cN')對應於對問題的回答。所以,「D2010」看起來像

  id c1 c2 c3 .. cX 
survey 1 
survey 2 
survey 3 
... 
survey N 

而「d2011」看起來像

  id c1 c2 c3 .. cY 
survey 1 
survey 2 
survey 3 
... 
survey N 

主要目標是展示如何響應已經改變了2010至11年,對於一個特定的問題。具體來說,我的目標是創建一個顯示,創建新表(三列)SQL命令,對於特定的響應,調查,兩年之間的區別:

  id 2010-response 2011-response 
survey 1 
survey 2 
survey 3 
... 
survey N 

如果列名已保持一致,那麼我需要什麼會被作爲東西

select d2011.id, d2010.c1 as 'last year', d2011.c1 'this year' from d2010 join d2011 on d2010.id=d2011.id; 

簡單不幸的是,誰創建的表沒有保存的列名一致的人;例如,

c1 of 2010 corresponds to c2 of 2011 
c2 of 2010 corresponds to c1 of 2011 
c3 of 2010 corresponds to c3 of 2011 
c4 of 2010 corresponds to c7 of 2011 
... 

所以我一直在努力做的就是輸入類似

select d2010.id, d2010.c1 as 'last year', d2011.f(c1) 'this year' from d2010 join d2011 on d2010.id=d2011.id; 

其中「d2011.f(C1)」表示使用功能的,列映射那些2011年的映射是不夠簡單,用數學公式來表示2010年的名字,所以我想我需要的是去像

2010 2011 
    c1 c2 
    c2 c1 
    c3 c3 
    c4 c7 

是否有SQL來表達加盟化經營的方式表我需要嗎?也就是說,通過映射表,有沒有辦法將以下內容轉換爲標準SQL(通常)和SQLite(特別是)?

select d2011.id, f(d2010.c1) as 'last year', d2011.c1 'this year' from d2010 join d2011 on d2010.id=d2011.id;.id; 

非常感謝!

回答

0

你基本上想要的是一種將列名存儲在表中的方法,並在以後的查詢中使用這些列名。不幸的是我相信你需要使用動態SQL。舉個例子:

declare @SQL nvarchar(1024) 
set @SQL = 'select * from Table' 
exec sp_executeSQL @SQL 

所以使用映射表,將有可能返回「映射」列名,並宣佈自己的加入:

declare @SQL nvarchar(1024) 
    declare @mappedColumnName nvarchar(1024) 

    select @mappedColumnName = 2011 from mappedTable where 2010 = 'c1' 

    set @SQL = 'select * 
    from d2010 join d2011 on d2010.id=' + @SQL + ';.id'; 

    exec sp_executeSQL @SQL 

我最近使用,如果可用另一種方法你是.NET中的實體框架。這使您可以使用反射動態選擇LINQ查詢中的列名稱。

這兩種方法對我來說都覺得「髒」,但這是對設計這些表的人的反思。相反,最好將它們導出到Excel中進行比較。

0

你的問題似乎並不完全清楚。 。 。你可以這樣做加入:

select d2011.id, d2010.c2 as 'last year', d2011.c1 'this year' 
from d2010 join d2011 on d2010.id = d2011.id 

沒有辦法在標準sql中動態指定列。動態SQL確實爲您提供了這種功能。

我懷疑你想要做什麼是最容易完成的方法是將兩個表列列表放入Excel,並列放入兩列,並使用Excel函數構建SQL語句。