标签: sql-server-2012

处理"除以零"的SQL case语句忽略条件THEN 0

这是SQL:

CASE 
    WHEN Field1 = 0 THEN 0 
    ELSE SUM((Field1 - Field2 * Field3)/Field1) 
END
Run Code Online (Sandbox Code Playgroud)

每次Field1 = 0时,它的变化和返回除以零误差

需要转移视线,我确信答案是显而易见的.

谢谢

sql case sql-server-2012

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

在SQL Server 2012 Decimal列中插入double会导致不精确

在从C#到SQL服务器没有任何不精确的情况下,让程序插入实际数字会遇到很多麻烦.

例如,以下是在推送到SQL Server之前如何在C#中处理数据的代码:

DataTable dt = new DataTable();
dt.Columns.Add("Number", typeof(double));

dt.Rows.Add(6.5);
dt.Rows.Add(7);
dt.Rows.Add(8);

SqlConnection con;
string sqlCmd;
SqlCommand cmd;

using (con = new SqlConnection(Common.DBLink))
{
                con.Open();
                SqlBulkCopy bulkCopy = new SqlBulkCopy(con);
                bulkCopy.DestinationTableName = "NumberTable";
                bulkCopy.WriteToServer(dt);
                con.Close();
}
Run Code Online (Sandbox Code Playgroud)

但如果我有一个像2.85这样的数字,它会被插入为2.8499.SQL列是一种DECIMAL(10,4)数据类型.这只发生在很少的数字上.对于像12.5或20这样的值,它永远不会发生.

c# sql-server double decimal sql-server-2012

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

如何在Microsoft SQL Server中设置最大索引值

我试图使索引值在100到200的范围内,而不是按照列类型int的0到上限.

对于创建我使用的表的下限,[ID] [int] IDENTITY(100, 1) NOT NULL但是我无法弄清楚如何达到200的上限.

怎么做到这一点?

问候

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

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

如何仅返回左连接中表的最大行

我有一张包含汽车信息的表格 dbo.Car

CarID | Make      | Model
23      Volvo       XC90
40      Chevrolet   Camaro
46      BMW         Z4   
Run Code Online (Sandbox Code Playgroud)

还有另一个表,dbo.CIS其中列出了其他信息.它是这样的:

CarID | Dist | U1 | U2 | U3 | U4 | U5 -- U22
23      180    65   94   80   56   88    71
23      1170   68   93   24   23   19    93
40      908    89   15   68   46   59    31
46      500    10   20   30   40   50    35
46      2300   60   62   44   52   75    99
Run Code Online (Sandbox Code Playgroud)

数据在这个表中意味着什么并不重要.但是,我想加入的CarID,只返回1行中具有的最高值Dist从列dbo.CIS …

sql sql-server sql-server-2012

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

从自己行中的值中选择的计算列的SQL

我有一张桌子,可以存放一个人的几个标识符.在此表中,我想创建一个计算的标识符列,该列根据可用的标识符存储该记录的最佳标识符.

例如(一些虚构的样本数据)....

表="公民"

Id | LastName | DL-No        | SS-No          | State-Id-No   | Calculated
------------------------------------------------------------------------
1  | Smith    | NULL         | 374-784-8888   | 7383204848    | ?
2  | Jones    | JG892435262  | NULL           | NULL          | ?
3  | Trask    | TSK73948379  | NULL           | 9276542119    | ?
4  | Clinton  | CL231429888  | 543-123-5555   | 1840430324    | ?
Run Code Online (Sandbox Code Playgroud)

我知道我想选择标识符的顺序......

  1. 驱动程序的许可证,无
  2. 社会保障,无
  3. 国家-ID-无

所以我希望计算出的标识符列成为表模式的一部分.期望的结果将是......

Id | LastName | DL-No        | SS-No          | State-Id-No   | Calculated
------------------------------------------------------------------------
1  | Smith    | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2012

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

从sql server中的连接中选择除最后X行之外的所有行

我在对数据库进行一些维护时遇到问题.我们有一个表A和一个具有一对多关系的表B. 现在,表B中的每一行都有1到10行,我希望看到除最近的5行之外的每一行.如果A中任何一行的B中有5行或更少的行,我不想看到它,因为我不关心那些数据.

这是我到目前为止的查询:

WITH cte (id, number)
AS
(
    SELECT A.id, COUNT(*)
    FROM A INNER JOIN B ON A.id=B.a
    GROUP BY A.id
)
SELECT A.id, B.id, number
FROM cte c 
INNER JOIN B ON B.a=c.id
WHERE number > 5
ORDER BY A.id, B.id DESC;
GO
Run Code Online (Sandbox Code Playgroud)

它会给我A和B中行的ID,而这个数字只是为了帮助我看看发生了什么(如果有10个匹配的行,那么它将是10,如果是9,则为9).

我真的不知道接下来要去哪里.我在A中有一个行列表,在B中有它们的匹配,我想只看到B中每行的最后5行.我的数据可能如下所示:

A | B | number
---------
1 | 7 | 7
1 | 6 | 7
1 | 5 | 7
1 | 4 | 7
1 | 3 | 7
1 | …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

使用CTE提供累计总数

我有一张桌子上有一些名字:

SELECT * FROM d;

Forename
--------------------------------
Robert
Susan
Frances
Kate
May
Alex
Anna
Run Code Online (Sandbox Code Playgroud)

我想按字母顺序提取累计名称长度.到目前为止,我有:

WITH    Names ( RowNum, Forename, ForenameLength )
          AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY forename ) AS RowNum ,
                        Forename ,
                        LEN(forename) AS ForenameLength
               FROM     d
             )
    SELECT  RowNum ,
            Forename ,
            ForenameLength ,
            ISNULL(ForenameLength + ( SELECT    ISNULL(SUM(ForenameLength),0)
                                      FROM      Names
                                      WHERE     RowNum < n.RowNum
                                    ), 0) AS CumLen
    FROM    NAMES n;

RowNum               Forename                         ForenameLength CumLen
-------------------- -------------------------------- -------------- -----------
1                    Alex                             4              4 …
Run Code Online (Sandbox Code Playgroud)

sql-server common-table-expression sql-server-2008 sql-server-2012

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

SQL Server替换函数bug?

我在下面的陈述中遗漏了什么吗?

select replace('xAxAxAx', 'xAx', 'xBx')
Run Code Online (Sandbox Code Playgroud)

因为它导致:

xBxAxBx
Run Code Online (Sandbox Code Playgroud)

这是已知的错误还是我错过了一些基本的东西?

微软称这个replace功能:

将所有出现的指定字符串值替换为另一个字符串值.

这不是第二次xAx出现吗?

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

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

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
查看次数

比较同一表中的记录并计算不同日期的差异

我有一个表,其中包含某些日期的股票及其权重列表.我想做的是在两个不同的日期选择属于投资组合的股票并比较权重.简单的例子如下,

Date 1st March 2015              Date 1st May 2015
Stock Name    Weight             Stock Name    Weight
ABC           20                 MNO           30
DEF           15                 XYZ           25
MNO           40                 LMN           30
LMN           25                 PPP           10
                                 KLM           5
                                 ABC           20
Run Code Online (Sandbox Code Playgroud)

结果我想

 Stock Name    Weight Change
 ABC           0
 DEF           -15
 MNO           -10
 LMN           5
 PPP           10
 KLM           5
 XYZ           25
Run Code Online (Sandbox Code Playgroud)

到目前为止,这就是我所需要的一切!

 with t0 as
(select * from PORT_WGT
and port_name = 'My Port'
and wgt <> 0 
and pricedate = '2015-01-02'),
t1 as
(select * from …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2012

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