小编ugh*_*hai的帖子

如何以字符串格式正确订购日期?

我在SQL Server 2005数据库中有一个包含以下字段的表:

  • id, integer
  • value, string
  • create_date, datetime

新数据不断被插入到此表中(每天数万条记录),因此我使用以下查询来比较在不同日期插入的数据量.

SELECT CONVERT(varchar(10), create_date, 101) as 'Date', COUNT(*) as 'Record Count',
FROM the_table
GROUP BY CONVERT(varchar(10), create_date, 101)
ORDER BY 'Date' desc
Run Code Online (Sandbox Code Playgroud)

此查询返回如下所示的数据:

12/20/2012 | 48155
12/19/2012 | 87561
12/18/2012 | 71467
Run Code Online (Sandbox Code Playgroud)

但是,在今天运行此查询时,我注意到排序无法按预期工作,数据库中有多年的数据.而不是今年的数据位于结果集的最顶端,它最终位于底部(为清晰起见省略了记录)

06/29/2012 | 9987
01/04/2013 | 15768
01/03/2013 | 77586
01/02/2013 | 23566
Run Code Online (Sandbox Code Playgroud)

我理解为什么会发生这种情况,因为我的格式化日期只是一个字符串,并且不能指望sql server将它排序为除字符串之外的任何东西.但我希望订购准确.我怎样才能做到这一点?(最近一天总是出现在第一天)

sql sql-server sql-server-2005

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

连接两个表-一个具有不同值的公用列

几天来,我一直在寻找如何执行此操作的方法-不幸的是,我对SQL查询没有太多的经验,因此这是反复试验的结果。

基本上,我创建了两个表-都具有一个DateTime列,而另一个具有值所在的列。每个表中的DateTime列具有不同的值。

所以...

ACOQ1 (Table 1)
===============

| DateTime | ACOQ1_Pump_Running |
|----------+--------------------|
| 7:14:12  |         1          |
| 8:09:03  |         1          |
Run Code Online (Sandbox Code Playgroud)

ACOQ2 (Table 2)
===============

| DateTime | ACOQ2_Pump_Running |
|----------+--------------------|
| 3:54:20  |         1          |
| 7:32:57  |         1          |
Run Code Online (Sandbox Code Playgroud)

我想合并这两个表,如下所示:

| DateTime | ACOQ1_Pump_Running | ACOQ2_Pump_Running |
|----------+--------------------+--------------------|
| 3:54:20  |      0 OR NULL     |         1          |
| 7:14:12  |         1          |      0 OR NULL     |
| 7:32:57  |      0 OR NULL     |         1          |
| …
Run Code Online (Sandbox Code Playgroud)

sql sql-server join sql-server-2000

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

如何计算SQL中的比率?

假设我有一个GAME包含以下字段的表

user_id, result
Run Code Online (Sandbox Code Playgroud)

我希望计算胜利百分比,定义为记录总数

result = 'Win'
Run Code Online (Sandbox Code Playgroud)

与记录总数相比

result <> ''
Run Code Online (Sandbox Code Playgroud)

我如何在SQL中执行此操作并以最高赢率百分比的顺序返回结果?

sql

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

从特定月份的表中删除数据

在我的表中,我有一个存储日期的列.我传递月号作为存储过程的参数.

我想从表中删除该月的所有条目.

可能吗....??

sql sql-server-2005

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

组合AND OR结果

我有这样的表.

NoteID  CustomerID  CustomerName    Note                    Type    Date    Active
6       81          Paris           test                    Info    2015-06-04  1
10      81          Rotterdam       Everything is allright  Comment 2015-06-04  1
11      81          Hamburg         Everything is allright  Info    2015-06-04  1
12      81          Hamburg         Everything is allright  Info    2015-06-04  1
13      81          Amsterdam       Everything is allright  Info    2015-06-04  1
14      81          Rotterdam       Everything is allLeft   Comment 2015-06-04  1
15      81          Hamburg         Everything is allLeft   Info    2015-06-04  1
16      81          Hamburg         Everything is allLeft   Info    2015-06-04  1
17      81 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

3
推荐指数
2
解决办法
152
查看次数

消息8115,级别16,状态2,行2算术溢出错误将表达式转换为数据类型int

触发此查询后,我收到错误.

select COUNT(*) 
from [DB1].dbo.Transaction(nolock) t 
join [DB2].dbo.visits (nolock) v 
on t.V_ID=v.V_ID 
where t.Ct_ID=11  
and t.Timestamp>'06-08-2015' 
and v.C_ID is null
Run Code Online (Sandbox Code Playgroud)

错误:

消息8115,级别16,状态2,行2算术溢出错误将表达式转换为数据类型int

sql sql-server sql-server-2008

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

如何根据另一列的值获得一列的平均值?

SQL问题

我目前正在尝试根据另一列的共享值获取某一列的某个子集的平均值。以下是一些示例数据:

Score     Player
  5          1
  9          1
  7          1
  8          2
  3          2
  6          2
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能分别得到玩家 1 和玩家 2 的平均得分呢?我的第一个想法是尝试这样的事情:

SELECT AVG(score) FROM table WHERE DISTINCT player
Run Code Online (Sandbox Code Playgroud)

但是,当然,distinct这只适用于select查询的部分。我使用子查询的任何尝试都会导致错误:

子查询返回多行。

任何人可以提供的任何帮助将不胜感激。

mysql sql-server

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

两个条件在同一列上

状态表有几种状态.我想要这样的查询.

select * from command where status <> 's' and status<> 'sc'
Run Code Online (Sandbox Code Playgroud)

但查询使用"状态"S检索数据.问题是什么?

sql sql-server sql-server-2008

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

如果列相同,则SQL select top

如果我有这样的表格:

Id  StateId Name
1   1   a
2   2   b
3   1   c
4   1   d
5   3   e
6   2   f
Run Code Online (Sandbox Code Playgroud)

我想选择如下:

Id  StateId Name
4   1   d
5   3   e
6   2   f
Run Code Online (Sandbox Code Playgroud)

例如,Ids 1,3,4具有stateid 1.因此选择具有最大Id的行,即4.

sql sql-server sql-server-2012

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

INFORMATION_SCHEMA.COLUMNS从表sql server中选择

我正在尝试创建一个正常的SQL查询,动态调用某个表中的列.我已经阅读了一些有关如何使用列的列表的论坛INFORMATION_SCHEMA.COLUMNS,但我想从中选择列INFORMATION_SCHEMA.COLUMNS from my table.

例如:

SELECT (SELECT TOP 1 COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = N'OPOR' AND LEFT(COLUMN_NAME, 2) = 'U_') FROM OPOR
Run Code Online (Sandbox Code Playgroud)

但它只返回列名.不是我表中此列的值.所以我的问题是,是否可以返回值INFORMATION_SCHEMA.COLUMNS并从我的表中选择它?我的示例专栏是,U_NewColumn.所以结果应该是:SELECT U_NewColumn FROM OPOR

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

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

使用CROSS APPLY

我有CarID的表(smallint)和另一张表与每辆车相关的事件.

现在我想获得按特定标准选择的汽车的最新活动,但这似乎不起作用.

当我有这样的查询来获取每辆车的最新事件时,它可以正常工作:

SELECT * FROM [dvm_data].[dbo].[Car] CD 
CROSS APPLY (
  SELECT TOP 1 * FROM [dvm_data].[dbo].[CarData] WHERE CarIndex = CD.ID) MD
Run Code Online (Sandbox Code Playgroud)

在另一方面,当我尝试使用限制汽车WHERE在第一SELECT,它不再起作用:

SELECT * FROM [dvm_data].[dbo].[Car] WHERE ID > 100 CD 
CROSS APPLY (
  SELECT TOP 1 * FROM [dvm_data].[dbo].[CarData] WHERE CarIndex = CD.ID) MD
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到错误消息:

消息102,级别15,状态1,行1'CD'附近的语法不正确.消息102,级别15,状态1,行3'MD'附近的语法不正确.

第一个查询本身工作正常:

SELECT * FROM [dvm_data].[dbo].[Car] WHERE ID > 100
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?通常使用的例子CROSS APPLY没有WHERE在第一SELECT查询,这是否意味着什么?

另一件事,如果我想DISTINCT在第一次查询中使用,找到具有某种类型事件的汽车,然后找到这些汽车的最新事件.它会是这样的,但这也行不通:

SELECT DISTINCT ID FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server cross-apply

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

如何将NULL作为无效列的值

我正在使用Sql Server 2012.考虑表模式,

create table A (col1 int, col2 int)
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行此查询,

select col1, col2, col3, col4 from A

我得到执行错误的col3col4不表.

但是有没有办法,这两列可以在结果中显示NULL为每行的值,即使它在表中不可用?

sql sql-server sql-server-2012 ssms-2012

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