我想找到解决现实问题的不同方法:想象一下比赛或比赛,用户收集积分.您必须构建一个查询以显示具有最佳"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 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)
但它是手动方式,它不是程序化转换的方式,因为它需要我键入每一行的每个插入值.
有人可以建议我更多的方式吗?
我有以下公式:
"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) OFFSET FETCH
不支持与TOP (n) WITH TIES
option的逻辑等价,它通过返回所有关系来确保确定性。
有任何解决方法有OFFSET FETCH
和WITH 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) 我有这样一张桌子:
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) 我目前正在使用以下返回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.
谢谢.
如何仅按年份从表中选择行?
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
我有一varbinary(max)
列将图像存储在 SQL 数据库中。
我正在处理一个 newdb 脚本,其中一个应用程序创建了一个新的 db 实例并填充了一些表。我正在处理的表之一是初始化该图像列。
为此,我使用 select 语句打印了列的内容,并将内容粘贴到 newdb 脚本的 insert 语句中。这最初似乎有效,但图像未正确加载。
所以我比较了DATALENTH()
原始数据(5469988)和新数据(21839)的。看来 Microsoft SQL Server management Studio - 2014 切断了数据,为什么我在某个时候从原始数据库复制了它。我需要能够获得该列的全部内容。有任何想法吗?
有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
)
如果可以请告诉我
最近我有一个性能调优经验,我想在这里分享并试图理解为什么这种改进发生了.
在我的一个过程中,我想根据其他一些记录的存在返回一个数据集.
我的查询:
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 ×10
sql-server ×9
t-sql ×7
pivot ×1
puzzle ×1
sql-order-by ×1
sqlite ×1
ssms ×1
varbinary ×1
varbinarymax ×1