仅过去具有特定值的行

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

我正在尝试学习 SQL,但这并不容易 :D

我需要代码来查找 Value1。

如果存在值 1,则将值 2 存储到 X 列中。

例如:

表1:

身份证 名字 姓氏 地点 年龄 喜欢蛋糕
1 艾伦 雅各布森 德国 25
2 本尼 雅各布森 丹麦 65
3 本尼 布勒 瑞典 30

等等

表2

身份证 汽车 车型
1 蒙迪欧 福特
2 106 标致
1 拉达 俄语

等等

表3

商店 现金
商店-1 500$
商店2 200$

因此表 1 和 2 有触发键

[ID]
,表 1 有列
[DO LIKE CAKE]
但表 2 没有。

我希望每个表都有一个

[ID]
列,并且我想要有
[DO LIKE CAKE]
。我认为这本身就是代码:)

然后,如果值

[ID]
存在,则将值 2 粘贴到整个表的
[DO LIKE CAKE]
中 :) 因此它会在表 1 2 3 中查找 id,但只在表 1 和 2 中看到它,但在表 3 中看不到它:D

希望这是有道理的。

好吧,我不是 SQL 编码方面最好的 :D

sql
1个回答
0
投票

我会帮助你,因为你似乎是新手。 首先,将来,请发布格式示例数据,以便人们轻松生成查询。我冒昧地在表变量中为您创建了这个,如下所示:

DECLARE @Table1 TABLE (ID INT, FirstName VARCHAR(50), LastName VARCHAR(50), Place VARCHAR(50), Age TINYINT, DoLikeCake BIT DEFAULT(NULL))
INSERT INTO @Table1 VALUES (1,'Allan','Jakobsen','Germany',25,NULL)
INSERT INTO @Table1 VALUES (2,'benny','Jakobsen','Denmark',65,NULL)
INSERT INTO @Table1 VALUES (3,'benny','buller','Sweden',30,NULL)


DECLARE @Table2 TABLE (ID INT, CarModel VARCHAR(50), CarType VARCHAR(50))
INSERT INTO @Table2 VALUES(1,'mondeo','Ford')
INSERT INTO @Table2 VALUES(2,'106','peugeot')
INSERT INTO @Table2 VALUES(1,'lada','russian')

DECLARE @Table3 TABLE (StoreName VARCHAR(50),Cash MONEY)
INSERT INTO @Table3 VALUES ('Store-1',500)
INSERT INTO @Table3 VALUES ('Store-2',200)

其次,我不确定您在查询中要查找什么。表三没有公共列,因此无法将其连接到主查询。我不确定“到处粘贴 DO LIKE CAKE”是什么意思,但您的查询在 Table2 中有多行与 Table1 中的行匹配。这将导致重复,除非以某种方式聚合数据。

看一下这个示例代码。我认为这就是你所追求的,但即使不是,你也应该能够弄清楚一般概念并移动事物。

如果您正在寻找其他内容,请澄清您的问题并回复。

SELECT  t.ID
        ,t.FirstName
        ,t.LastName
        ,t.Place
        ,t.Age
        ,t.DoLikeCake
        ,STRING_AGG(t2.CarType, ',') AS CarTypes
        ,STRING_AGG(t2.CarModel, ',') AS CarModels
FROM    @Table1 AS t
        LEFT OUTER JOIN @Table2 AS t2 ON t2.ID = t.ID
GROUP BY
        t.ID
        ,t.FirstName
        ,t.LastName
        ,t.Place
        ,t.Age
        ,t.DoLikeCake;
© www.soinside.com 2019 - 2024. All rights reserved.