【发布时间】:2021-06-30 14:13:46
【问题描述】:
表 A 的行带有“FS”,表 B 的行带有“FS”和“SC” 我需要创建一个 SQL 查询,该查询可以返回在表 B 中具有 FST_SC COLUMN 作为“SC”行的行,因为我们在表 A 中只有“FS”记录。我的要求是更改该行的 RATE在表 B 到 0(我可以在检索行后执行此操作并且我知道如何执行此操作)。
CREATE TABLE TABLEA
(
CONTRACT TEXT,
ID text,
CLASS TEXT,
ZONE TEXT,
CHARGE TEXT,
FST_SC TEXT,
RATE TEXT,
EFFECTIVE_DATE TEXT,
PRIMARY KEY (CONTRACT, ID, CLASS, ZONE, CHARGE, FST_SC, RATE, EFFECTIVE_DATE)
);
CREATE TABLE TABLEB
(
CONTRACT TEXT,
ID text,
CLASS TEXT,
ZONE TEXT,
CHARGE TEXT,
FST_SC TEXT,
RATE TEXT,
EFFECTIVE_DATE TEXT,
PRIMARY KEY (CONTRACT, ID, CLASS, ZONE, CHARGE, FST_SC, RATE, EFFECTIVE_DATE)
);
表格
|MS|US|UE||1|NR|FST|15|09/23/2021|
表B
|MS|US|UE||1|NR|FST|15|09/23/2021|
|MS|US|UE||1|NR|SC|15|09/23/2021|
期望的输出:
|MS|US|UE||1|NR|SC|15|09/23/2021|
这是我正在尝试的,但它给了我 0 行: EFFECTIVE_DATE 有计数(DISTINCT FST_SC)=1) AND FST_ADL_SC = 'SC';
【问题讨论】:
-
请展示您当前的尝试并描述其中的问题。如果您有任何错误,请将错误文本作为纯文本发布。
-
您不应该使用包含(几乎)所有列表的主键!这是一个非常糟糕的做法.......并且主键绝不能包含像
TEXT(或更好:VARCHAR(MAX))这样的大列 - 它应该尽可能小 -
在不相关的说明中,
TEXT/NTEXT数据类型多年来一直在弃用列表中,您应该改用VARCHAR(MAX)/NVARCHAR(MAX)。话虽如此,您可能不应该为您发布的列,Zone 和 Rate 看起来应该是INT和Effective_Date应该是DATE。如果您对架构有任何控制权,则应尽早更改此设置。 -
@marc_s - 表已创建,对此无能为力。
-
@GarethD 我同意你的看法,但表已经创建,只是添加到这里以大致了解结构
标签: sql sql-server join