Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果多个id在另一个表中重复,如何仅选择一行_C#_Sql_Sql Server_Database_Datagridview - Fatal编程技术网

C# 如果多个id在另一个表中重复,如何仅选择一行

C# 如果多个id在另一个表中重复,如何仅选择一行,c#,sql,sql-server,database,datagridview,C#,Sql,Sql Server,Database,Datagridview,我有三张桌子: 1-合同 -合同编号 -合同主体 -案件编号 contracts_id | subject_contract | case_id 001 | name | 01 002 | name | 02 003 | name | 01 2-U文件 -合同编号 -文件数据 contracts_id | file_data 001

我有三张桌子:

1-合同 -合同编号 -合同主体 -案件编号

contracts_id  |  subject_contract  |  case_id
001           |  name              |  01
002           |  name              |  02
003           |  name              |  01
2-U文件 -合同编号 -文件数据

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)>
在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 
  • 获取所有图像在一行中有一个合同id(如果合同001有两个图像,则在一行中获取它们)
我试试这个:

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

我想我的一个项目也有类似的情况

您需要做的是使用存储过程和键将多个表中的所有列合并到一个表中。确保首先获得唯一列,然后将记录与它们链接

让我们以您的模式为例,我们将创建一个新表,并将其命名为
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中,然后重复上述过程


我主要在需要两个以上表的报表和视图上这样做。它将使记录保持条理化,并在一个地方更具可读性。将主表和记录放在一边不动,如果主表中有任何变化(新记录、修改等),则会在合同中自动更新

如果合同001有3张图片怎么办?在这种情况下是否需要另一列?@NorbertvanNobelen“在一行上”的意思是在两个单独的列中。请参阅示例输出,如何有两个“文件\数据”列。@Prdp yes if images increment columnincreasing@NorbertvanNobelen是的,我希望它在单独的列中。您需要
动态透视
。检查此问题,如果您发现实现此问题有任何困难,请从静态轴心开始。不管你试过什么,我都会写答案。。
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   ),