Sql server 如何将一列的值与多个其他列的值进行比较

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,

我有一个表,它存储年度值以及每个日历月(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,
    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接受