任何人都可以告诉我如何从 Oracle中的表中找出第N个最大的条目?
像最大的我们可以使用 MAX(column_name)有没有有效的方法来找到第n个最大的?
SQL Server允许我插入存储过程的返回结果集:
DECLARE @T TABLE (
ID int,
Name varchar(255),
Amount money)
INSERT INTO @T
exec dbo.pVendorBalance
Run Code Online (Sandbox Code Playgroud)
只要存储过程只返回1个结果集,这就可以工作.
如果存储过程返回多个结果集,有没有办法使这个工作?
例如
DECLARE @T1 (...)
DECLARE @T2 (...)
INSERT INTO @T1 THEN INTO @T2
exec dbo.pVendorBalance
Run Code Online (Sandbox Code Playgroud) 在玩游戏期间,sys.dm_exec_describe_first_result_set我到达这一点:
CREATE TABLE #tab(col INT, x XML );
INSERT INTO #tab(col,x) VALUES (1,NULL), (2,NULL), (3,'<a>x</a>');
SELECT 'Simple XML' AS description, name, system_type_name
FROM sys.dm_exec_describe_first_result_set(
N'SELECT col
FROM #tab
FOR XML AUTO', NULL, 0)
UNION ALL
SELECT 'Wrapped with subquery', name, system_type_name
FROM sys.dm_exec_describe_first_result_set(
N'SELECT(SELECT col
FROM #tab
FOR XML AUTO) AS wrapped_subquery', NULL, 0)
UNION ALL
SELECT 'XML column', name, system_type_name
FROM sys.dm_exec_describe_first_result_set(
N'SELECT x FROM #tab ', NULL, 0)
UNION ALL
SELECT 'Casted XML', name, system_type_name
FROM …Run Code Online (Sandbox Code Playgroud) 我试图不在这里重新发明轮子......我有这四个领域:
[tbl_Contacts].[FirstName],
[tbl_Contacts].[MiddleInitial],
[tbl_Contacts].[LastName],
[tbl_Contacts].[Suffix]
Run Code Online (Sandbox Code Playgroud)
我想FullName在视图中创建一个字段,但如果字段为空,我就不能有额外的空格...
所以我做不到FirstName + ' ' + MiddleInitial + ' ' + LastName + ' ' + Suffix...因为如果没有中间的首字母或后缀,我会在字段中有2个额外的空格.我想我需要一个Case语句,但我认为有人会有一个方便的方法...而且,m iddleinitial和suffix可能是null.
我正在使用SQL Server 2014,我正在使用我的一个表中的列,列出了到达日期.
它采用以下格式:
ArrivalDate
2015-10-17 00:00:00.000
2015-12-03 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
我正在编写一个查询,从上表中提取数据,包括ArrivalDate列.但是,我需要转换日期,以便它们成为各自月份的第一天.
换句话说,我的查询应该输出上面的例子,如下所示:
2015-10-01 00:00:00.000
2015-12-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
我需要这个,以便我可以在PowerPivot模型中与我的日期表建立关系.
我尝试过这种语法,但它不符合我的要求:
CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2]
Run Code Online (Sandbox Code Playgroud) 下面的查询是我的sql server查询,我希望它将其转换为hive查询:
select DATEDIFF([minute], '19000101', '2013-01-01 10:10:10')
Run Code Online (Sandbox Code Playgroud) 我想知道为什么BINARY_CHECKSUM函数返回相同的不同结果:
SELECT *, BINARY_CHECKSUM(a,b) AS bc
FROM (VALUES(1, NULL, 100),
(2, NULL, NULL),
(3, 1, 2)) s(id,a,b);
SELECT *, BINARY_CHECKSUM(a,b) AS bc
FROM (VALUES(1, NULL, 100),
(2, NULL, NULL)) s(id,a,b);
Run Code Online (Sandbox Code Playgroud)
输出继电器:
+-----+----+------+-------------+
| id | a | b | bc |
+-----+----+------+-------------+
| 1 | | 100 | -109 |
| 2 | | | -2147483640 |
| 3 | 1 | 2 | 18 |
+-----+----+------+-------------+
-- -109 vs 100
+-----+----+------+------------+
| id | a | b …Run Code Online (Sandbox Code Playgroud) 试图在PostgreSQL上重新创建我的SQL Server数据库.一切都很好,除了我找不到如何重新创建这个索引:
USE [mytablename]
GO
CREATE NONCLUSTERED INDEX [myindex]
ON [dbo].[mytablename] ([col1],[col2])
INCLUDE ([col3],[col4])
GO
Run Code Online (Sandbox Code Playgroud)
将非常感谢您的帮助.
阿列克谢
更新:
http://img38.imageshack.us/img38/1071/89013974.png这里是db结构的明星+ eav
只有一个查询
SELECT this_.id as id0_0_,
this_.device_id as device2_0_0_,
this_.time_id as time3_0_0_,
this_.gps_detail_id as gps4_0_0_
FROM [scoutserver_data].[dbo].[DataMessage] this_
WHERE this_.time_id = 65536 and this_.device_id = 32768
Run Code Online (Sandbox Code Playgroud)
也许它不是最佳的atm.我正在研究它.也许这样的事情
SELECT * FROM [scoutserver_data].[dbo].[TimeDimension]
INNER JOIN ([scoutserver_data].[dbo].[DeviceDimension]
INNER JOIN [scoutserver_data].[dbo].[DataMessage]
ON [DeviceDimension].[device_id] =[DataMessage].[device_id])
ON [TimeDimension].[time_id] = [DataMessage].[time_id]
WHERE DeviceDimension.serial_id='2' AND TimeDimension.Day=15 AND TimeDimension.Year=2009
Run Code Online (Sandbox Code Playgroud)
任何提示欢迎=)
我搜索了StackOverflow以获取有关如何在SQL文本字符串中插入换行符的所有可能解决方案.我已经提到这个链接,但没有用.如何在SQL Server VARCHAR/NVARCHAR字符串中插入换行符
但是没有一个解决方案适合我.
这就是我想要做的:
insert into sample (dex, col)
values (2, 'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.')
Run Code Online (Sandbox Code Playgroud)
但这是生成的输出:(从样本中选择Col,其中dex = 2)
这是第1行.这是第2行.
这是我想要的输出:
这是第1行.
这是第2行.
如果有帮助,我正在使用SQL服务器和SSMS.
任何想法为什么它不起作用?
Oracle支持RETURNING可能非常有用的子句.
例如对于数据:
CREATE TABLE t(Id INT, Val varchar2(50));
INSERT INTO t(Id, Val)
SELECT 10,'a' FROM dual
UNION ALL SELECT 20,'b' FROM dual
UNION ALL SELECT 30,'a' FROM dual
UNION ALL SELECT 40,'b' FROM dual;
Run Code Online (Sandbox Code Playgroud)
查询:
DECLARE
l_cnt INT;
BEGIN
DELETE FROM t RETURNING COUNT(*) INTO l_cnt;
DBMS_OUTPUT.put_line('l_cnt: ' || l_cnt);
END;
Run Code Online (Sandbox Code Playgroud)
l_cnt:4
它支持MIN/MAX/AVG/SUM/LISTAGG:
DECLARE
l_max INT;
l_min INT;
l_str VARCHAR2(100);
BEGIN
DELETE FROM t
RETURNING MAX(id), MIN(id), LISTAGG(id, ',') WITHIN GROUP(ORDER BY id)
INTO l_max, l_min, l_str;
DBMS_OUTPUT.put_line('l_max:'||l_max||' …Run Code Online (Sandbox Code Playgroud)