小编Luk*_*zda的帖子

如何从表中获得第二大或第三大条目

任何人都可以告诉我如何 Oracle中的表中找出第N个最大的条目

像最大的我们可以使用 MAX(column_name)有没有有效的方法来找到第n个最大的

sql oracle max

11
推荐指数
3
解决办法
7万
查看次数

使用具有多个结果集的exec INSERT INTO

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)

t-sql sql-server stored-procedures

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

SELECT FOR XML AUTO并返回数据类型

在玩游戏期间,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)

xml sql t-sql sql-server sql-server-2012

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

在T-SQL中组合First,Middle Initial,Last name和Suffix(无额外空格)

我试图不在这里重新发明轮子......我有这四个领域:

[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 iddleinitialsuffix可能是null.

sql t-sql sql-server

10
推荐指数
3
解决办法
4万
查看次数

舍入日期到该月的第一天

我正在使用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 t-sql sql-server date sql-server-2014

10
推荐指数
4
解决办法
2万
查看次数

如何使用Hive以分钟为单位获取日期差异

下面的查询是我的sql server查询,我希望它将其转换为hive查询:

select DATEDIFF([minute], '19000101', '2013-01-01 10:10:10')
Run Code Online (Sandbox Code Playgroud)

sql hadoop hive date-difference

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

BINARY_CHECKSUM - 取决于行数的不同结果

我想知道为什么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)

sql t-sql sql-server

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

PostgreSQL模拟SQL Server索引(包括列)

试图在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)

任何提示欢迎=)

sql database sql-server postgresql database-design

9
推荐指数
2
解决办法
5495
查看次数

SQL:在varchar字符串中插入换行符

我搜索了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.

任何想法为什么它不起作用?

sql t-sql sql-server

9
推荐指数
4
解决办法
5万
查看次数

Oracle - RETURNING与聚合函数相结合

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)

sql oracle aggregate-functions sql-returning

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