Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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# 使用Join从SQL表中获取数据,并根据Join使用附加列_C#_Sql Server - Fatal编程技术网

C# 使用Join从SQL表中获取数据,并根据Join使用附加列

C# 使用Join从SQL表中获取数据,并根据Join使用附加列,c#,sql-server,C#,Sql Server,我必须创建与外键关系相关的表 地址表 员工表 如何使用SQL查询向员工显示链接地址,如 Address | Country | Address Type xyz | USA | Postal xyz | IND | Visting 他们是否有可能使用SQL Server查询或C将任何员工的链接地址显示为带有地址类型名称的列表?您可以使用它来实现,Live demo 输出 我试过用UNPIVOT。 下面给出了示例代码以供参考 创建表地址 id INT ,地

我必须创建与外键关系相关的表

地址表

员工表

如何使用SQL查询向员工显示链接地址,如

Address  | Country |  Address Type
xyz      |   USA   | Postal
xyz      |   IND   | Visting
他们是否有可能使用SQL Server查询或C将任何员工的链接地址显示为带有地址类型名称的列表?

您可以使用它来实现,Live demo

输出


我试过用UNPIVOT。 下面给出了示例代码以供参考

创建表地址 id INT ,地址:VARCHAR255 ,country VARCHAR20 ; 创建表Employee id INT ,姓名VARCHAR20 ,VARCHAR20公司 ,邮政地址INT ,访问地址INT ; 插入地址 值1、'xyz'、'USA',2、'xyz'、'India'; 插入到员工中 值1,'test','xyz',1,2; 带CTE_地址UNPIVOT 像 选择名称 ,地址类型 ,地址 从选择* 来自员工 作为src 地址的UnpivoAddress\u id键入[邮政地址],[访问地址]作为地址Unpivot 选择地址 ,地址:country ,CASE unp\u addr.addr\u类型 当“邮政地址”时,则为“邮政” 当“访问地址”时,然后是“访问” 以地址类型结尾 从地址作为地址 在addr.id=unp\u addr.addr\u id上加入CTE\u address unpivot作为unp\u addr 您还可以尝试使用左连接和合并,如下所示:

declare @Address table (id int, address varchar(10), country varchar(10));
insert into @address values
(1,'xyz','USA'),
(2,'xyz','IND');
declare @Employee table (id int, name varchar(10),company varchar(10),Postal_address int,Visiting_address int);
insert into @employee values
(1, 'Test', 'xyz', 1, 2);

select a.address, a.country,
       case when ePost.id is not null then 'Postal'
            when eVisit.id is not null then 'Visiting'
            else null end AddressType
from @address a
left join @employee ePost on a.address = ePost.company and a.id = ePost.Postal_address
left join @employee eVisit on a.address = eVisit.company and a.id = eVisit.Visiting_address

我们渴望帮助,关键词是帮助-而不是为你做一切。那么,告诉我们您尝试了什么以及您遇到了什么问题。根据您生成的地址类型,换句话说,您如何获得地址类型?@Saif基于邮政地址和访问地址。请检查我下面的回答。此查询不符合条件,我想从员工列表中查看某个特定员工的地址。因此,您应该添加Where子句进行筛选。例如,Employee.id=1这是否回答了您的问题?如果你需要帮助,请告诉我@pankash mann
Address  | Country |  Address Type
xyz      |   USA   | Postal
xyz      |   IND   | Visting
DECLARE @Address AS TABLE(id int, address varchar(50), country varchar(50))
INSERT INTO @Address
VALUES(1, 'xyz', 'USA'),
      (2, 'xyz', 'IND')

DECLARE @Employee  AS TABLE(id int, name varchar(50), company varchar(50), Postal_address int, Visiting_address int)
INSERT INTO @Employee
VALUES(1,'Test',  'xyz', 1,  2)

SELECT a.address, a.country, 'Postal' AS Address_Type
FROM @Employee e
INNER JOIN @Address a on a.id = Postal_address
WHERE e.id = 1

UNION ALL

SELECT a.address, a.country, 'Visting' AS Address_Type
FROM @Employee e
INNER JOIN @Address a on a.id = Visiting_address
WHERE e.id = 1
address country Address_Type
xyz     USA     Postal
xyz     IND     Visting
declare @Address table (id int, address varchar(10), country varchar(10));
insert into @address values
(1,'xyz','USA'),
(2,'xyz','IND');
declare @Employee table (id int, name varchar(10),company varchar(10),Postal_address int,Visiting_address int);
insert into @employee values
(1, 'Test', 'xyz', 1, 2);

select a.address, a.country,
       case when ePost.id is not null then 'Postal'
            when eVisit.id is not null then 'Visiting'
            else null end AddressType
from @address a
left join @employee ePost on a.address = ePost.company and a.id = ePost.Postal_address
left join @employee eVisit on a.address = eVisit.company and a.id = eVisit.Visiting_address