2012-02-07 64 views
0

不用說,對於T-SQL,我是一個嚴厲的新手,使用SSMSE不是我的第一選擇,但我堅持使用它,設計數據庫。基本上,我試圖從我們當前的數據庫輸出數據,所以我可以將其上傳到我們的新軟件,我需要首先獲取可管理的CSV文件中的這些數據。使用SQL Server Management Studio Express結合多個表格

我試圖在各種研究中移動與主體相關的測量,但數據位於幾個表中。這些表如下(主鍵列在第一位):

CREATE TABLE Study (StudyID int, StudyName nvarchar(50)) 

CREATE TABLE Subject (SubjectID int, SubjectName nvarchar(20), StudyID int) 

CREATE TABLE Implant (ImplantID int, ImplantName nvarchar(255), StudyID int) 

CREATE TABLE Measurement (MeasurementID int, SubjectID int, ImplantID int, 
          Length float, Width float, Volume float, 
          PerformDateTime datetime) 

我知道我是新來的數據庫,但這種拓撲真的搞糊塗了。我們有很多的研究,我很樂意爲每個研究創建一個excel文件,以直接導入的格式組織數據。要做到這一點,我需要生成一個CSV文件看起來像這樣每個研究:

CREATE TABLE ImportStudy (SubjectName, PerformDateTime, Length, Width, Volume) 

這是確定的主題名稱將在第一列重複,因爲這是新的軟件是如何將其插入。任何幫助都會很棒,即使我不得不使用WHERE StudyName LIKE N'ABC123'並輸入每一個,我的生活將在一個月或兩個月內挽救我。如果任何人都可以幫助我添加一個面向對象的「For Each」循環的T-SQL等價物,那將是驚人的。再次感謝任何幫助。

最佳, 傑夫

+0

好吧,現在我開始瞭解我的簡單問題,並讓它變得更具挑戰性。我忘記了有多個植入物的子集。這意味着具有相同PerformDateTime的同一動物的兩個植入物(不同植入物ID)具有獨特的測量結果(不同的測量ID)。所以我的決賽桌將有一個左長,左寬,左音量和相同的權利。有什麼建議麼。再次感謝, – cjweitz 2012-02-07 04:11:30

回答

2

我不是100%肯定,你想要什麼,但得到一個CSV文件是很容易的。如果您想提取指定的數據,運行一個類似的查詢,並有管理工作室結果輸出到一個CSV文件:

select Subject.SubjectName, 
     Measurement.PerformDateTime, 
     Measurement.Length, 
     Measurement.Width, 
     Measurement.Volume 
From Study 
inner join Subject on Study.StudyId = Subject.StudyId 
inner join Implant on Study.StudyId = Implant.StudyId 
inner join Measurement on Implant.ImplantId = Measurement.ImplantId 

什麼是有點怪你的模式是,你已經鏈接對受試者和植入物的測量。在上面的查詢中,我忽略了從主題到測量的鏈接。

+0

內部連接是T-SQL中的默認連接類型,因此只需連接 – 2012-02-07 02:09:26

+1

我總是將內部/外部連接放入。 Terse適用於經常睡覺的人。 :( – 2012-02-07 02:14:20

+0

感謝您的幫助。我在加入時失去了秩序,所以沒有任何事情可以爲我工作。我希望管理工作室可以做一個For-Each或其他東西。無論哪種方式,我應該可以用windows commmand shell來做到這一點,並將其作爲sqlcmd的批處理進程運行。我將會對此表示贊同,因此對sqlcmd&cmd的任何見解都會受到歡迎。噢,我沒有設計這個模式。我只是有處理它的喜悅。 – cjweitz 2012-02-07 03:29:33

0

我有點不確定你的問題 - 你問如何導出到CSV,或者查詢應該看起來像生成結果集?

在任何情況下,您都可以在SSMS中構建一個臨時SELECT語句。運行完畢後,您可以選擇結果網格,單擊鼠標右鍵,然後選擇「使用標題複製」,然後粘貼到Excel中。

爲了構建您的查詢而不看到數據,它看起來好像在表格之間的鍵名相同。你可以加入這些,並且應該接近你正在尋找的東西。

基本思想:

SELECT 
    S.SubjectName, 
    M.PerformDateTime, 
    M.Length, 
    M.Width, 
    M.Volume 
FROM 
    Subject Sub ON S.StudyID = Sub.StudyID 
    INNER JOIN 
    Measurements M ON Sub.SubjectID = M.SubjectID 

如果需要通過研究(您列出的列不包括信息)來過濾,你可以將它添加到列表JOIN爲好,然後在WHERE子句中篩選。

+0

研究過濾器將在JOIN列表@Dave中的哪個位置?對不起,但我只是在這裏待了幾個月。錯誤地告訴你的老闆,你在大學讀了一門java課程,他們認爲你知道關於電腦的一切。 – cjweitz 2012-02-07 03:38:14

相關問題