Объединение нескольких таблиц с помощью SQL Server Management Studio Express - PullRequest
0 голосов
/ 07 февраля 2012

Как само собой разумеется, я серьезный новичок, когда дело доходит до T-SQL, и использование SSMSE - не мой первый вариант, но я застрял с ним и плохо спроектированной базой данных. По сути, я пытаюсь вывести данные из нашей текущей базы данных, чтобы я мог загрузить их в наше новое программное обеспечение, и мне нужно сначала получить эти данные в управляемых файлах CSV.

Я пытаюсь переместить измерения, связанные с предметами в различных исследованиях, но данные лежат в нескольких таблицах. Таблицы следующие (первичные ключи указаны первыми):

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' и ввести каждый из них. Если кто-нибудь может помочь мне добавить T-SQL-эквивалент цикла Object Forented «For Each», это было бы замечательно. Еще раз спасибо за любую помощь.

Лучший, Джефф

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Я не уверен на 100%, что вы хотите, но получить файл CSV довольно легко.Если вы хотите извлечь данные, которые вы указали, запустите запрос, подобный этому, и пусть Management Studio выведет результаты в файл 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 голосов
/ 07 февраля 2012

Я немного не уверен в вашем вопросе - вы спрашиваете, как экспортировать в CSV, или как должен выглядеть запрос для генерации набора результатов?

В любом случае вы можете просто создать специальный оператор SELECT в SSMS. Запустив его, вы можете выбрать таблицу результатов, щелкнуть правой кнопкой мыши, выбрать «Копировать с заголовками» и вставить в 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.

...