sql - 指定哪一列在前 SQL

标签 sql sql-server sql-server-2008

我正在处理大量教会成员名单,以便给他们写信。我们希望这封信说“亲爱的约翰和简·史密斯”。我们将使用 Word 从 Excel 工作表进行邮件合并。重要的是男性名字必须始终放在第一位。

每个人在我正在使用的表中都有自己的行。他们有一个唯一的 ID 以及一个家庭 ID。我正在使用该家庭 ID 将家庭放在同一行。目前,我使用 MAX(CASE WHEN) 分隔男性姓名和女性姓名,以便指定内容在哪里。它看起来像这样:

+-----------+------------+--------------------------+
| family id | male name  | female name |  last name |
+-----------+------------+--------------------------+
|      1234 | john       | jane        |  doe       |
|      1235 | bob        | cindy       |  smith     | 
|      1236 | NULL       | susan       |  jones     |
|      1237 | jim        | NULL        |  taylor    |
+-----------+------------+--------------------------+

但是当家里只有一名成员时,我遇到了一个问题。

这是我的查询的一部分:

SELECT
fm.family_id AS 'Family ID',
MAX(CASE WHEN PB.gender like 'm' and FM.role_luid=29 THEN PB.nick_name END) 
AS 'Male Name',
MAX(CASE WHEN PB.gender like 'f' and FM.role_luid=29 THEN PB.nick_name END) 
AS 'Female Name',
PB.last_name AS 'Last Name',

FROM core_family F

我想我需要使用 STUFF 或类似的东西来组合行,但我需要某种方法来指定哪一列先出现,以便男性名字始终出现在第一位。本质上,如上所述,对于有两人的家庭,我需要在这封信上写“亲爱的约翰和简·史密斯”,对于有一个人的家庭,我需要写“亲爱的约翰·史密斯”。所以我希望我的结果可能是这样的:

+-----------+--------------+-----------+
| family id | First name   | last name |
+-----------+--------------+-----------+
|      1234 | john & jane  | doe       |
|      1235 | bob & cindy  | smith     | 
|      1236 | susan        | jones     |
|      1237 | jim          | taylor    |
+-----------+--------------+-----------+

最佳答案

您可以使用中间表(假设您的家庭 ID 没有 3 个姓名)。

从您指出的使用表中:

select
 id
 , coalesce(male_name+' & '+female_name,male_name, female_name)
 , last_name 
from F;

Here is an example with your data

基本上,如果您在 Sql Server 中使用 + 连接,您将得到 null。因此,如果男性或女性名字为 NULL,您将得到 NULL。如果 Coalesce 看到 NULL,它将继续处理下一个值。这样,您可以为每个系列获得一对带有 '&' 的名称或单个名称。

关于sql - 指定哪一列在前 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465258/

相关文章:

sql-server-2008 - 使用 SCHEMABINDING 的索引 View

sql-server-2005 - 如何在一列中插入多个选中的复选框值

mysql - 连接表sql的问题

mysql - 如何在 SQL 查询中过滤 IP 地址范围?

sql - 如何等待异步完成 - NodeJs

java - 从查询填充 JTable 的最简单方法

sql - View 和随机数

sql-server - 将 SQL Server Express 2008 与 SQL Server 2005 数据库一起使用 - 如何检查兼容性

sql-server - 想要从 txt 文件批量导入 SQL Server 2012 中的临时表

sql - 查找并生成某个范围日期的值