如何针对两种不同的条件编写 returns 两个不同列的查询?

How can I write a query that returns two different columns for two different conditions?

我有一个 Microsoft SQL 服务器 table,其中包含三列 - 一列用于 Locations,一列用于关联的 Images 和一个指示给定图像是否用作 main 图像用于 给定位置(这样做是因为历史上每个位置都上传了多张图片,此列表示哪张图片是实际使用的一张

现在我们希望能够选择并分配 第二张图片 作为我们位置的徽标,从而添加第四列以指示哪个图片成为该徽标。

所以我有一个 table 看起来像这样:

+----------+----------+-----------------+-----------+
| filename | location |    IsMainImage  |    IsLogo |
+----------+----------+-----------------+-----------+
|  img1    |       10 |         True    |      Null |
|  img2    |       10 |         Null    |      True |
|  img3    |       10 |         Null    |      Null |
|  img4    |       20 |         True    |      Null |
|  img5    |       20 |         NULL    |      True |
+----------+----------+-----------------+-----------+

我的目标是编写一个查询,将 return img1 和 img2 作为我查询中同一行中的不同列,然后是另一行 img3 和 img4。从上面的 table 中,我需要输出如下所示:

+-----------+-------------+
| filename1 | filename2   | 
+-----------+-------------+
|  img1     |      img2   |
|  img4     |      img5   |
+-----------+-------------+

请注意,我的描述过于简单化了。我正在修改和我无法修改的另一个进程使用的 SSIS 包。这就是为什么我需要这种格式的输出的原因。 Filename1 和 Filename2 曾经是同一个文件(徽标是主图像的调整大小版本),现在我需要区分两者。

只有标记为 IsMainImage 的列显示在文件名 1 下,只有标记为 IsLogo 的列显示在文件名 2 下,这一点很重要。

如有任何帮助,我将不胜感激。谢谢!

你可以加入table本身,像这样:

SELECT im1.filename as filename1,im2.filename as filename2
FROM images im1
JOIN images im2
     ON im1.location = im2.location
     AND im2.IsLogo = 1
WHERE im1.IsMainImage  = 1

使用 Case 表达式:

SELECT max(CASE WHEN [IsMainImage] = 'True' then filename end) as filename1,
        max(CASE WHEN [IsLogo] = 'True' then filename end) as filename2
        from Table_testcase group  by location;