【问题标题】:How can I write a query that returns two different columns for two different conditions?如何编写针对两种不同条件返回两个不同列的查询?
【发布时间】:2020-12-18 16:02:00
【问题描述】:

我有一个 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 下。

我将不胜感激。谢谢!

【问题讨论】:

    标签: sql-server tsql conditional-statements multiple-conditions


    【解决方案1】:

    你可以自己加入表格,像这样:

    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
    

    【讨论】:

    • 谢谢!这很接近,但是它只返回设置了两个图像的位置的行。所有其他位置都将被忽略,这可能会成为一个问题。我意识到这不是从我的描述中立即清楚的。
    【解决方案2】:

    使用大小写表达式:

    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;
    

    【讨论】:

    • 感谢您的回复!我会尽快试用并通知您。
    • 旁白:这是case expression,而不是statement
    • 不明白。您能否编辑您的答案并粘贴导致问题的查询?
    • 这在回答我的问题时有效,我标记为答案。谢谢!我遇到的意外问题是能够将其用作子查询,因为它导致“当 EXISTS 未引入子查询时,选择列表中只能指定一个表达式”。
    • Mohd Atif,首先,衷心感谢您。你确实回答了我的问题。我正在处理的是它是更大查询的一部分的结果。我将尝试将其作为我的问题的一部分 - 一旦我弄清楚如何呈现它,也许作为评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多