如何结合多个字段的数据

时间:2016-09-26 18:44:05

标签: sql-server

我正在使用Sql Server。我正在尝试使用联合来确保我根据企业代码从事务表中获取所有驱动程序电话和其他值,并将它们与基于相同企业代码的连接表中的相同DriverPhone和其他值联合起来。连接表查询(联合的后半部分)检索的另一个字段值(ETA)比它从事务表中检索的多。有些驾驶员手机可能在一张桌子而不是另一张桌子上,反之亦然,或两者兼而有之。 所以我需要两个表之间所有驱动程序的列表,没有重复的驱动程序,但我希望它们按连接表中的ETA值排序。是否可以这样做?我不认为我的工作会起作用,而且我认为它只会按ETA对查询的连接部分进行排序,当我需要联合的结果集本身按ETA排序时,如果有人能指出我的话正确的方向,非常感谢。

SqlCommand getDrivers = new SqlCommand("SELECT DriverPhone, UserHandle FROM Transactions WHERE EstablishmentCode = @ec UNION SELECT PhoneNumber, UserHandle, ETA FROM Connection WHERE EstablishmentCode = @ec AND Dispatcher = @disp OrderBy ETA", myTransactions);
getDrivers.Parameters.AddWithValue("@ec", "ec");
getDrivers.Parameters.AddWithValue("@disp", false);

1 个答案:

答案 0 :(得分:1)

ETA添加到第一个查询中,以便UNION查询中的两个查询都具有相同的字段数。由于您的ETA表中没有Transactions字段,只需将该字段设置为NULL:

SqlCommand getDrivers = new SqlCommand("SELECT DriverPhone, UserHandle, CAST(NULL AS DATE) as ETA FROM Transactions WHERE EstablishmentCode = @ec UNION SELECT PhoneNumber, UserHandle, ETA FROM Connection WHERE EstablishmentCode = @ec AND Dispatcher = @disp OrderBy ETA", myTransactions);
getDrivers.Parameters.AddWithValue("@ec", "ec");
getDrivers.Parameters.AddWithValue("@disp", false);