У меня есть 3 таблицы:

1-Контракты -contracts_id -subject_contract -case_id

contracts_id  |  subject_contract  |  case_id
001           |  name              |  01
002           |  name              |  02
003           |  name              |  01

2-файлы_контрактов -id_contracts -file_data

contracts_id  |  file_data
001           |  image <varbinary(MAX)>
002           |  image <varbinary(MAX)>
001           |  image <varbinary(MAX)>
002           |  image <varbinary(MAX)>
003           |  image <varbinary(MAX)>
003           |  image <varbinary(MAX)>

3 случая -case_id -case_name

case_id  |  case_name
01       |  case one
02       |  case two

Нужен вывод в dataGridView следующим образом:

contracts_id  |  subject_contract  |  case_name  |  file_data  |  file_data 
001           |  name              |  case one   |  image      |  image 
002           |  name              |  case two   |  image      |  image 
003           |  name              |  case one   |  image      |  image 
  • получить все изображения с одним Contract_id в одной строке (если в контракте 001 есть 2 изображения, получите их в одной строке)

Я пробую это:

create proc GET_ALL_CONTRACTS
as
SELECT contracts.[contracts_id]
      ,[subject_contract]
      ,[case_name] 
      ,[file_data]
FROM contracts, contracts_files
  Contracts INNER join Cases
  ON Cases.case_id = Contracts.case_id 
where contracts_files.contracts_id = Contracts.contracts_id
-1
D2rkZ3r0 22 Июн 2017 в 07:44
Что, если в контракте 001 есть 3 изображения? Вы хотите еще одну колонку в этом случае?
 – 
Pரதீப்
22 Июн 2017 в 07:45
«в одной строке» означает в двух отдельных столбцах. См. Пример вывода, как есть два столбца «file_data».
 – 
ZLK
22 Июн 2017 в 07:53
Да, если изображения увеличиваются, столбец увеличивается
 – 
D2rkZ3r0
22 Июн 2017 в 07:56
Да, я хочу это в отдельных столбцах
 – 
D2rkZ3r0
22 Июн 2017 в 07:58

1 ответ

Лучший ответ

Думаю, у меня был похожий случай с одним из моих проектов, над которым я работал.

Что вам нужно сделать, так это объединить все столбцы из нескольких таблиц в одну таблицу с помощью хранимых процедур и ключей внешнего источника. Убедившись, что вы сначала получаете уникальные столбцы, а затем связываете с ними записи.

Давайте возьмем вашу схему в качестве примера, мы создадим новую таблицу и назовем ее ContractsMain, и в ней будут следующие столбцы:

[ID] | [ContractsID] | [SubjectContract] | [ContractsFileData] | [CaseID] | [CaseName]

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

ContractID = ( SELECT ContractsMain.ContractsID 
               FROM ContractsMain
               INNER JOIN Contracts ON Contracts_ID = ContractsMain.ContractsID       ),

SubjectContract = ( SELECT ContractsMain.SubjectContract
                    FROM ContractsMain
                   INNER JOIN Contracts ON Contracts_ID = ContractsMain.ContractsID   ),

Итак, вы выполните тот же метод для каждого столбца, добавив свои функции и условия для каждого из них, и позволите процедуре ОБНОВЛЯТЬ и ИЗМЕНИТЬ таблицу в соответствии с вашими условиями.

Затем вы создаете новое представление, добавляете таблицу ContractsMain и выбираете столбцы, которые нужно просмотреть.

Любое новое представление, которое требует новых столбцов, которых нет в ContractsMain, вы просто добавляете столбцы в ContractsMain и повторяете описанный выше процесс.

Я делаю это в основном для отчетов и представлений, которым требуется более двух таблиц. В котором записи будут организованы и более удобочитаемы в одном месте. Оставив основные таблицы и записи в стороне и нетронутыми, и если есть какие-либо изменения в основных таблицах (новые записи, модификации и т. Д.), Это будет автоматически обновлено в ContractsMain.

0
iSR5 22 Июн 2017 в 19:41