Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
在sql查询中,同一列可以使用两次不同的筛选器吗?_Sql - Fatal编程技术网

在sql查询中,同一列可以使用两次不同的筛选器吗?

在sql查询中,同一列可以使用两次不同的筛选器吗?,sql,Sql,我正在为客户创建报告。在其中,我需要组合来自4个表的信息。直到最后一个表,我只使用一列,一切都很好。本专栏包含电话和电子邮件(一应俱全)。我需要在单独的列中显示电子邮件地址和电话号码,但它们来自同一列 我可以同时显示两者,但它们显示在单独的行中。我也可以复制该列,然后在excel中对其进行排序,但客户需要能够自己进行排序,而无需在之后进行编辑 SELECT CustomerProcessO.GID, CustomerProcessO.FOIF,

我正在为客户创建报告。在其中,我需要组合来自4个表的信息。直到最后一个表,我只使用一列,一切都很好。本专栏包含电话和电子邮件(一应俱全)。我需要在单独的列中显示电子邮件地址和电话号码,但它们来自同一列

我可以同时显示两者,但它们显示在单独的行中。我也可以复制该列,然后在excel中对其进行排序,但客户需要能够自己进行排序,而无需在之后进行编辑

    SELECT CustomerProcessO.GID,
           CustomerProcessO.FOIF,
           Customers.FirstName,
           Customers.LastName,
           SalesPersons.FirstName,
           SalesPersons.LastName,
           DynamicListData.DataContent AS Email,
           DynamicListData.DataContent AS Phone
      FROM CustomerProcessO
LEFT OUTER JOIN Customers ON CustomerProcessO.id = Customers.id
LEFT OUTER JOIN SalesPersons ON CustomerProcessO.GIDSalesPerson = SalesPersons.GID
LEFT OUTER JOIN DynamicListData ON ParentId = Customers.id
     WHERE DynamicListData.KeyField = 'EMAILS'
        OR DynamicListData.KeyField = 'PHONES'

我得到的结果是正确的,但我得到的电话号码和电子邮件分为两行。我需要一列包含电子邮件,一列包含电话号码。您可以加入同一个表两次:

SELECT dld1.DataContent AS Email, dld2.DataContent AS Phone
...
LEFT JOIN DynamicListData dld1 ON dld1.ParentId = Customers.id AND dld1.KeyField = 'EMAILS'
LEFT JOIN DynamicListData dld2 ON dld2.ParentId = Customers.id AND dld2.KeyField = 'PHONES'

可以将同一个表联接两次:

SELECT dld1.DataContent AS Email, dld2.DataContent AS Phone
...
LEFT JOIN DynamicListData dld1 ON dld1.ParentId = Customers.id AND dld1.KeyField = 'EMAILS'
LEFT JOIN DynamicListData dld2 ON dld2.ParentId = Customers.id AND dld2.KeyField = 'PHONES'

你应该提出更有意义的表别名。你应该提出更有意义的表别名。不幸的是,我还没有创建代码。谢谢你的帮助,效果很好!不幸的是,我还没有创建代码。谢谢你的帮助,效果很好!