如何针对两种不同的条件编写 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;
我有一个 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;