У меня есть 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 ответ
Думаю, у меня был похожий случай с одним из моих проектов, над которым я работал.
Что вам нужно сделать, так это объединить все столбцы из нескольких таблиц в одну таблицу с помощью хранимых процедур и ключей внешнего источника. Убедившись, что вы сначала получаете уникальные столбцы, а затем связываете с ними записи.
Давайте возьмем вашу схему в качестве примера, мы создадим новую таблицу и назовем ее 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.
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
dynamic pivot
. Отметьте этот вопрос stackoverflow.com/questions/10404348/… < / a> Начните со статического поворота, если вы обнаружите какие-либо трудности в его достижении. Размещайте все, что вы пробовали, я напишу ответ ..