如何在 SQL 中拉回数据,其中一列中的值与另一列中匹配

问题描述 投票:0回答:1

选择@@Microsoft SQL Server Management Studio 我希望在数据中找到 A 列中的值(例如“Apple”或“Cherry”)在 B 列中找到的所有示例,并提取 A 列的原始数据行。下面的示例数据堆栈.

A 栏 B 栏 C 栏 D 栏
1 苹果
2 橙色 苹果 返回
3 李子
4 苹果 苹果 接收
5 香蕉
6 樱桃
7 桃子
8 桃子 樱桃 接收
9 香蕉
0 樱桃 樱桃 返回

预期返回值: | A 栏 | B 列 |C 列 |D 列 | | -------- | -------- |-------- |-------- | 1 |苹果| | | 1 | 2 |橙色|苹果|返回 | -1 | 4 |苹果|苹果|接收 | 1 | 6 |樱桃| | | 1 | 8 |桃子|樱桃|接收 | 1 | 0 |樱桃|樱桃|返回 | -1 |

我对 SQL 相当陌生,不确定这是否是缺乏知识或 SQL 数据操作的限制。我也在学习 Python,如果需要用 Python 来操作,我会尝试一下。

尝试过:

选择 *

哪里

([B 列] 不为空或 [A 列] 与 [B 列] 相同)

来自[DF]

尝试的代码2:

选择 concat([A 列],'-',[B 列])

来自[DF]

其中 A 列类似于 concat([Column A],'-',[Column B])

python sql-server matching
1个回答
0
投票
DECLARE @Table TABLE (ColumnA INT,  ColumnB VARCHAR(10), ColumnC VARCHAR(10), ColumnD VARCHAR(10));
INSERT INTO @Table (ColumnA, ColumnB, ColumnC, ColumnD) VALUES
(1, 'Apple  ', NULL, NULL), (2, 'Orange', 'Apple', 'Return'), (3, 'Plum', NULL, NULL), (4, 'Apple', 'Apple', 'Receive'),
(5, 'Banana', NULL, NULL), (6, 'Cherry', NULL, NULL), (7, 'Peach', NULL, NULL), (8, 'Peach', 'Cherry', 'Receive'),
(9, 'Banana', NULL, NULL), (0, 'Cherry', 'Cherry', 'Return');

听起来您正在寻找自连接,将表连接回自身:

SELECT *
  FROM @Table a
    INNER JOIN @Table b
      ON a.ColumnB = b.ColumnC;
A 栏 B 栏 C 栏 D 栏 A 栏 B 栏 C 栏 D 栏
4 苹果 苹果 接收 2 橙色 苹果 返回
4 苹果 苹果 接收 4 苹果 苹果 接收
6 樱桃 8 桃子 樱桃 接收
0 樱桃 樱桃 返回 8 桃子 樱桃 接收
6 樱桃 0 樱桃 樱桃 返回
0 樱桃 樱桃 返回 0 樱桃 樱桃 返回
© www.soinside.com 2019 - 2024. All rights reserved.