Sql server 如何将一列的值与多个其他列的值进行比较
我有一个表,它存储年度值以及每个日历月(1月到12月)的值 我想轻松地检查所有12个月列中的值,并确定每个月之间的值是否相同。每个值列定义为Sql server 如何将一列的值与多个其他列的值进行比较,sql-server,tsql,Sql Server,Tsql,我有一个表,它存储年度值以及每个日历月(1月到12月)的值 我想轻松地检查所有12个月列中的值,并确定每个月之间的值是否相同。每个值列定义为INT,可以包含空值 在选择中比较这些列的最简单方法是什么 CREATE TABLE #FOO ( ID INT NOT NULL IDENTITY(1,1), YearlyValue INT NULL, JanValue INT NULL, FebValue INT NULL, MarValue INT NULL,
INT
,可以包含空值
在选择中比较这些列的最简单方法是什么
CREATE TABLE #FOO
(
ID INT NOT NULL IDENTITY(1,1),
YearlyValue INT NULL,
JanValue INT NULL,
FebValue INT NULL,
MarValue INT NULL,
AprValue INT NULL,
MayValue INT NULL,
JunValue INT NULL,
JulValue INT NULL,
AugValue INT NULL,
SepValue INT NULL,
OctValue INT NULL,
NovValue INT NULL,
DecValue INT NULL
);
INSERT INTO #FOO (YearlyValue, JanValue, FebValue, MarValue, AprValue, MayValue, JunValue, JulValue, AugValue, SepValue, OctValue, NovValue, DecValue)
VALUES (NULL, 19, 19, 19, 19, 14, 14, 14, 15, 15, 15, 15, 16)
, (5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5)
, (NULL, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5)
;
SELECT * FROM #FOO
DROP TABLE #FOO;
编辑
这似乎对我正在尝试做的事情很有效。感谢用户MuthuMK
,以及所有其他人的帮助
SELECT D.ID, MIN(A) AS MinValue, MAX(A) AS MaxValue
FROM #FOO AS D
CROSS APPLY
(
VALUES (D.JanValue), (D.FebValue), (D.MarValue), (D.AprValue), (D.MayValue)
, (D.JunValue), (D.JulValue), (D.AugValue), (D.SepValue), (D.OctValue)
, (D.NovValue), (D.DecValue)
) AS X(A)
GROUP BY D.ID
HAVING MIN(A) = MAX(A)
如果你想检查每一个新的插入,我建议使用触发器是最好的方法
12个月的不同值。如果是针对现有数据,则存储过程将是最简单的方法。从表中选择*,其中JanValue=FebValue=MarValue=…=DecValue
where JanValue = FebValue
and JanValue = MarValue
and JanValue = AprValue
...
这将返回Jan-Dec相同的所有行
不确定目标到底是什么,但您可以更进一步,将其转化为更新
,改为所有12个月列相同的行的年度值
:
updatetable SET AnnualValue=JanValue,其中JanValue=FebValue=MarValue=…=DecValue
where JanValue = FebValue
and JanValue = MarValue
and JanValue = AprValue
...
任何null都将返回false请显示采样数据和预期结果,您只是想看看它们是否相同吗?如中所示,您只是在寻找是/否答案,还是需要知道哪些列具有相同的值?如果您只是试图获得“它们是否都相同”的是/否答案,请按行进行并集,数组的大小将告诉您有多少个唯一值(1表示它们都相同)@Jackson yes,我正试图在选择上确定所有12列或13列是否包含相同的值。@游戏是我更新了帖子。是的,这是插入数据库的工作。然而,你的回答表明我对我的问题不够清楚。我已经对其进行了更新,以反映我希望通过SELECT
执行此操作。请尝试此操作。交叉应用。不幸的是,SQL Server不喜欢column=column=column
语法。AnnualValue
列的管理已经完成。我只是尝试使用SELECT
语句来验证数据是否良好。那么columnA=columnB和columnA=columnC
呢?或者您的意思是SQL Server不采用column=column
类型,您还可以声明一个等于JanValue
的变量,如果SQL Server接受