小编Ayo*_*rus的帖子

如何在不满足WHERE条件时选择至少一行的一行?

我有一个非常简单的查询,返回一组行,从下表:

Table1
N1  N2
1   A1
1   A2
2   B1
2   B2
2   B3
Run Code Online (Sandbox Code Playgroud)

我只需要从表中一行(TOP(1))N1 = @X.在所有情况下,我宁愿得到一个特定的N2值,但并非所有情况下N2都会存在一个值N1

例如,以下查询不会返回任何行:

SELECT TOP(1) N1, N2 FROM Table WHERE N1 = 2 AND N2 = 'B4'
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种简单的方法来返回至少1行,即使条件N2 = @N2没有满足.返回哪一行无关紧要,如果该@N2值不存在则任何行都可以.

到目前为止,我已经完成了以下操作,但我想如果有人知道更简单的事情:

;with tmp AS (
SELECT TOP(1) *, 1 AS No FROM Table1 WHERE N1 = @N1 AND N2 = @N2
UNION
SELECT TOP(1) *, 2 AS No FROM Table1 WHERE N1 = @N1 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

3
推荐指数
1
解决办法
72
查看次数

如何使用两个值(列)进行PIVOT查询?

我正在尝试创建两列PIVOT查询.结构如下:

DECLARE @Tmp TABLE(  Id1 int, Id2 int,  Name nvarchar(20), Val1 int, Val2 nvarchar(10))
Run Code Online (Sandbox Code Playgroud)

使用以下虚拟数据:

        INSERT INTO @Tmp VALUES(1,10,'A',2,'str1'), (1,11,'B',2,'str2'),     
(2,10,'A',3,'str3'),(3,11,'B',4, null),(4,11,'B',5,'str4'),(4,10,'A',5,null)
Run Code Online (Sandbox Code Playgroud)

我想要实现的是具有2个不同值(Val1, Val2)的PIVOT查询.我确实尝试了以下查询,但是,由于Val2是a ,因此无法对结果中的值进行分组nvarchar

     SELECT * FROM 
        (SELECT Id1, Name, Val1, Val2, Name +'_Val2' AS ColVal2  FROM @Tmp) AS tb 
        PIVOT(MIN(Val1) FOR Name IN([A],[B])) pv
        PIVOT(MIN(Val2) FOR ColVal2 IN([A_Val2],[B_Val2])) pv2
        -- GROUP BY could go here ... 
Run Code Online (Sandbox Code Playgroud)

重要的是要查询将是动态的,因为值Name不是固定的,即Id1可以与n相关Id2

所需的输出应如下所示:

Id1     A   B     A_Val2    B_Val2  
 1      2   2       str1    str2 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server pivot sql-server-2008

1
推荐指数
1
解决办法
58
查看次数

标签 统计

sql ×2

sql-server ×2

sql-server-2008 ×2

pivot ×1

t-sql ×1