小编sql*_*ser的帖子

SQL查询从列表中获取最高"n"分数

我想找到解决现实问题的不同方法:想象一下比赛或比赛,用户收集积分.您必须构建一个查询以显示具有最佳"n"分数的用户列表.

我正在做一个例子来澄清.让我们说这是用户表,获得的积分:

UserId - Points
1      - 100
2      -  75
3      -  50
4      -  50
5      -  50
6      -  25
Run Code Online (Sandbox Code Playgroud)

如果我想要前3个分数,结果将是:

UserId - Points
1      - 100
2      -  75
3      -  50
4      -  50
5      -  50
Run Code Online (Sandbox Code Playgroud)

这可以在视图或存储过程中实现,如您所愿.我的目标数据库是Sql Server.实际上我解决了这个问题,但我认为有不同的方法来获得结果...比我的更快或更有效率.

sql sql-server puzzle

6
推荐指数
1
解决办法
2万
查看次数

SQL server varchar.toArray()或string.toArray()方法

我想将我的字符串数据转换为sql server中的数组.我尝试过如下.

SELECT '223456789' AS SerialOriginalCode
-- SerialOriginalCode 223456789
DECLARE @tbl_SerialOriginalVerion TABLE(ID INT, SerialOriginalCode INT);
INSERT INTO @tbl_SerialOriginalVerion VALUES
(1, 2),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9);
SELECT * FROM @tbl_SerialOriginalVerion
Run Code Online (Sandbox Code Playgroud)

但它是手动方式,它不是程序化转换的方式,因为它需要我键入每一行的每个插入值.

有人可以建议我更多的方式吗?

sql t-sql sql-server

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

SQL:一个月内的总天数

我有以下公式:

"Value1" * 100 * "Total day in a month" * "Value2"
Run Code Online (Sandbox Code Playgroud)

我有下表:

ID     Date        Time     Value1     Value2
1      2014-01-01  00:00    10         20
2      2014-01-01  01:00    20         5
Run Code Online (Sandbox Code Playgroud)

我想在一年中选择一个只使用一个参数的数据Year.
如何将公式应用于查询?

结果应该是:

ID     Date        Time     Value1     Value2   TotalDayinMonth   Result
1      2014-01-01  00:00    10         20       31                620000
2      2014-01-01  01:00    20         5        31                310000
ff.   
Run Code Online (Sandbox Code Playgroud)

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

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

如何将 OFFSET/FETCH 和 WITH TIES 放在一起?

OFFSET FETCH不支持与TOP (n) WITH TIESoption的逻辑等价,它通过返回所有关系来确保确定性。

有任何解决方法有OFFSET FETCHWITH TIES在一起?

使用示例数据创建语句

CREATE TABLE #tbl(Id INT, Name VARCHAR(10))

INSERT #tbl
    SELECT 1, 'a' UNION ALL
    SELECT 1, 'a' UNION ALL
    SELECT 2, 'b' UNION ALL
    SELECT 2, 'b' UNION ALL
    SELECT 2, 'b' UNION ALL
    SELECT 3, 'c' UNION ALL
    SELECT 3, 'c' UNION ALL
    SELECT 3, 'c'
Run Code Online (Sandbox Code Playgroud)

最佳

SELECT TOP 3 * FROM #tbl ORDER BY Id

Id  Name
1   a
1   a
2   b …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-order-by sql-server-2012

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

如何在透视中为列提供自定义名称

我有这样一张桌子:

id  unit
1   mm  
2   cm 
3   kg
Run Code Online (Sandbox Code Playgroud)

当我对此执行数据透视操作时,我得到的结果如下:

1  2  3
mm cm kg
Run Code Online (Sandbox Code Playgroud)

是否可以在此处获取自定义列名称,如下所示:

d1  d2  d3
mm  cm  kg
Run Code Online (Sandbox Code Playgroud)

我使用Pivot作为:

IF OBJECT_ID('tempdb..#t') IS NOT NULL 
DROP TABLE #t
GO

CREATE  table #t 
(id varchar(max),unit varchar(max))
insert into #t (id,unit)values 
(1,'kg'),
(2,'cm'),
(3,'mm'),
(4,'m')

DECLARE @statement NVARCHAR(max)
   ,@columns NVARCHAR(max)

SELECT @columns = ISNULL(@columns + ',', '') + N'[' + cast(tbl.id as varchar(max)) + ']'
   FROM (
   SELECT DISTINCT id
   FROM #t
   ) AS tbl

   SELECT @statement = …
Run Code Online (Sandbox Code Playgroud)

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

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

选择所有行并忽略第一行

我目前正在使用以下返回25行的SQL查询.如何修改它以忽略第一行:

SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales)) 
OVER () as avg_sum 
FROM sales_report 
GROUP BY fiscal_year 
ORDER BY fiscal_year ASC
Run Code Online (Sandbox Code Playgroud)

我正在使用SQL Server 2008.

谢谢.

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

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

SQLite - 仅按年份选择?

如何仅按年份从表中选择行?

SELECT * FROM speckdata AS s WHERE DATE_FORMAT(s.localdate, '%Y') = '2014')
Run Code Online (Sandbox Code Playgroud)

我可以得到结果 MySQL

现在sqlite我得到这个错误,

SQLiteManager:可能的SQL语法错误:SELECT*FROM speckdata AS s WHERE DATE_FORMAT(s.localdate,'%Y')='2014')[near")":语法错误异常名称:NS_ERROR_FAILURE异常消息:组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[mozIStorageConnection.createStatement]

有任何想法吗?

编辑:

如果我改成它,

WHERE DATE(s.localdate, '%Y') = '2014'
Run Code Online (Sandbox Code Playgroud)

它没有返回任何结果.

顺便说一句,localdate是日期时间格式,如2014-10-09 14:59:53

sql sqlite

5
推荐指数
2
解决办法
2747
查看次数

如何提取 varbinary(max) 列的值?

我有一varbinary(max)列将图像存储在 SQL 数据库中。

我正在处理一个 newdb 脚本,其中一个应用程序创建了一个新的 db 实例并填充了一些表。我正在处理的表之一是初始化该图像列。

为此,我使用 select 语句打印了列的内容,并将内容粘贴到 newdb 脚本的 insert 语句中。这最初似乎有效,但图像未正确加载。

所以我比较了DATALENTH()原始数据(5469988)和新数据(21839)的。看来 Microsoft SQL Server management Studio - 2014 切断了数据,为什么我在某个时候从原始数据库复制了它。我需要能够获得该列的全部内容。有任何想法吗?

sql sql-server ssms varbinary varbinarymax

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

在 SQL 中将多个值传递给函数的参数

Getfunctionname(userid, startdate, enddate)返回表的函数

我的问题是我可以传递具有多个值的变量吗?

IE

getfunctionname(@userid, startdate, enddate)
Run Code Online (Sandbox Code Playgroud)

变量的值@userid就像

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

(实际上是使用split函数将值从 is 中分离出来1,2,3,4,5

如果可以请告诉我

sql t-sql sql-server sql-server-2008 sql-server-2012

5
推荐指数
1
解决办法
2万
查看次数

为什么将查询计数分配给变量比直接检查更好?

最近我有一个性能调优经验,我想在这里分享并试图理解为什么这种改进发生了.

在我的一个过程中,我想根据其他一些记录的存在返回一个数据集.

我的查询:

IF (SELECT COUNT(1) FROM ...) > 0
    SELECT …
Run Code Online (Sandbox Code Playgroud)

此查询大约需要5秒钟.

我做了一个更改并将IF语句的输出分配给变量然后检查它.

DECLARE @cnt INT = 0
SELECT @cnt = COUNT(1) FROM …

IF @cnt > 0
    SELECT …
Run Code Online (Sandbox Code Playgroud)

这个运行不到1秒.

我也试过IF EXISTS,但在改进之前得到了相同的结果(5秒).

我非常想知道为什么编译器的行为差异很大,如果有任何特定的答案.

谢谢

sql t-sql sql-server sql-server-2008-r2 query-performance

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