我想知道是否有按条件选择列的选项。
SQL查询是从表中获取2行,然后比较这两行的每个列值。
我希望所选列是具有不匹配值的列
select * (only column with different values)
from Account c
where c.DistributorID = "ID"
and c.AccountID = "ID" or c.AccountID = "ID"
******编辑************
这是我的第一个问题,很抱歉,如果我不清楚它......
(index)---- AccountID ---- DistributorID ---- Name --- City --- Fun
1 ---------- 12345 ------------- ------------ 2 -------丹NY ------- 5
2 ---------- 45678 ------------- ----------- 2 -----丹尼尔NY --- ---- 6
我想创建一个查询,只选择和显示具有不同值的列,在本例中我将看到结果:
(索引)---- AccountID -------名称----乐趣
--- 1 -------- 12345 -----------担------ 5
--- 2 -------- ---------- 45678 ----丹尼尔6
答案 0 :(得分: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
答案 1 :(得分:0)
如果我理解你的想法,那么你的解决方案可能会在动态sql中。如果您查看由表的object_id过滤的sys.columns,那么您将获得列的列表。如果您使用该列表返回列名称,如果列名称的内容不匹配,那么您可以构造一些内容来返回该数据。
假设您要使用它来发现行之间的差异,我建议输出三列:Column name,valueInRow1,valueInRow2作为更可读的结果集。请注意,这将是一个相当粗糙和复杂的TSQL,但不是一个简单的查询。
这里的技术作为单独的项目被很好地记录,尽管没有像这样整理。如果你完全陷入困境并且不知道从哪里开始那么请告诉我,我会帮你的。希望这足以让你走上一条道路。
答案 2 :(得分: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")