如何解决如何编写查询以针对两个不同条件返回两个不同的列?
我有一个Microsoft SQL Server表,其中有三列-一列用于 Locations ,一列用于相关的 Images ,另一列指示是否应使用给定的图像用作给定位置的主图像(之所以这样做,是因为历史上每个位置上载了多张图像,并且此列指示一个图像 strong>实际上已被使用)。
现在,我们希望能够为我们的位置选择并分配第二张图片作为徽标,从而增加了第四列以指示哪个图像成为该徽标。
所以我有一个看起来像这样的表:
+----------+----------+-----------------+-----------+
| filename | location | IsMainImage | IsLogo |
+----------+----------+-----------------+-----------+
| img1 | 10 | True | Null |
| img2 | 10 | Null | True |
| img3 | 10 | Null | Null |
| img4 | 20 | True | Null |
| img5 | 20 | NULL | True |
+----------+----------+-----------------+-----------+
我的目标是编写一个查询,该查询将在查询的同一行中将img1和img2作为不同的列返回,然后将img3和img4返回另一行。从上表中,我需要输出看起来像这样:
+-----------+-------------+
| filename1 | filename2 |
+-----------+-------------+
| img1 | img2 |
| img4 | img5 |
+-----------+-------------+
请注意,我的描述过于简单。我正在修改SSIS程序包,该程序包由我无法修改的另一个进程使用。这就是为什么我需要这种格式的输出的原因。 后来变成Filename1和Filename2的是同一文件(徽标是主图像的调整大小版本),现在我需要区分两者。
至关重要的是,只有标记为IsMainImage的列显示在filename1下,而只有IsLogo标记的列显示在filename2下。
对此我将不胜感激。谢谢!
解决方法
使用案例表达:
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;
,
您可以将表与自身连接起来,如下所示:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。