SQL Server - 按条件选择列

问题描述 投票:-2回答:3

我想知道是否有按条件选择列的选项。

SQL查询是从表中获取2行,然后比较这两行的每个列值。

我希望所选列是具有不匹配值的列

select * (only column with different values)
from Account c 
where c.DistributorID = "ID"
  and c.AccountID = "ID" or c.AccountID = "ID"

******编辑************

这是我的第一个问题,很抱歉,如果我不清楚它..

(索引)---- AccountID ---- DistributorID ----名称---城市---乐趣

1 ---------- 12345 ------------- 2 ------------和------- NY --- ---- 5

2 45678 ---------- ----------- ------------- 2丹尼尔NY ----- ------ -6

我想创建一个查询,只选择和显示具有不同值的列,在本例中我将看到结果:

(索引)---- AccountID -------名称----好玩

---1--------12345-----------dan------5

--- 2 -------- ---------- 45678 ----丹尼尔6

sql sql-server
3个回答
0
投票

您需要输入所有列。这意味着您的选择变为:

select column1,column2

如果要删除column1和column2相等的行,则查询将变为:

select Column1, Column2
from Account c 
where c.DistributorID= "ID"and 
c.AccountID = "ID" or c.AccountID = "ID" 
AND Column1 != Column2

0
投票

如果我理解你在寻找什么,那么你的解决方案可能会在动态sql中。如果您查看由表的object_id过滤的sys.columns,那么您将获得列的列表。如果使用该列表返回列名称,如果列名称的内容不匹配,则可以构造某些内容以返回该数据。

假设您将使用它来发现行之间的差异,我建议输出三列:列名,valueInRow1,valueInRow2作为更可读的结果集。请注意,这将是一个相当粗糙和复杂的TSQL,但不是一个简单的查询。

这里的技术作为单独的项目被很好地记录,尽管没有像这样整理。如果你完全陷入困境并且不知道从哪里开始那么请告诉我,我会帮你的。希望这足以让你走上一条道路。


0
投票

我认为您正在寻找的是根据特定条件获取结果集中的值。如果是这种情况,那么CASE(双关语)可以帮助您解决问题:

select *, CASE c.AccountID 
                      WHEN "ID1" THEN ColumnForID1
                      WHEN "ID2" THEN ColumnForID2
                      END
from Account c 
where c.DistributorID= "ID"and c.AccountID in ("ID1", "ID2") 
© www.soinside.com 2019 - 2024. All rights reserved.