小编gbn*_*gbn的帖子

SQL Server:多行的SUM(),包括where子句

我有一个类似于以下内容的表:

  PropertyID     Amount     Type       EndDate
 --------------------------------------------
   1              100       RENT        null              
   1              50        WATER       null         
   1              60        ELEC        null        
   1              10        OTHER       null      
   2              70        RENT        null
   2              10        WATER       null
Run Code Online (Sandbox Code Playgroud)

将向物业收取多个物品,并且还会多次收费.例如,RENT可以向属性#1收费12次(超过一年),但是我唯一感兴趣的是ENDDATE为null(换句话说,当前)

我想实现:

    PropertyId       Amount
  --------------------------       
      1                220
      2                80
Run Code Online (Sandbox Code Playgroud)

我试图做这样的事情:

SELECT
   propertyId,
   SUM() as TOTAL_COSTS
FROM
   MyTable
Run Code Online (Sandbox Code Playgroud)

但是,在SUM中我会被迫多次选择带回每种类型电荷的当前金额吗?我可以看到这变得混乱,我希望有一个更简单的解决方案

有任何想法吗?

sql t-sql sql-server aggregate

25
推荐指数
3
解决办法
19万
查看次数

varchar(-1)是什么意思?

SQL Server 2008中varchar(-1)的含义是什么?它是varchar(max)的替代品吗?

sql sql-server varchar sql-server-2008

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

SQL Server 2008 - 帮助编写简单的INSERT触发器

这是Microsoft SQL Server 2008.

我有2个表,Employee和EmployeeResult,我正在尝试在EmployeeResult上编写一个简单的INSERT触发器来执行此操作 - 每次在EmployeeResult中执行INSERT,例如:

(Jack,200,Sales)(Jane,300,Marketing)(John,400,Engineering)

它应该查找Name,Department条目对,例如

(杰克,销售),(简,市场营销),(约翰,工程)

在Employee表中,如果这样的员工不存在,则应将其插入Employee表中.

我所拥有的是关于如何修复"???"的未知数:

CREATE TRIGGER trig_Update_Employee
ON [EmployeeResult]
FOR INSERT
AS
IF EXISTS (SELECT COUNT(*) FROM Employee WHERE ???)
  BEGIN
   INSERT INTO [Employee] (Name, Department) VALUES (???, ???)
  END
Run Code Online (Sandbox Code Playgroud)

请提前帮助,谢谢

架构:

Employee
--------
Name, varchar(50)
Department, varchar (50)

EmployeeResult
--------------
Name, varchar(50)
Salary, int
Department, varchar (50)
Run Code Online (Sandbox Code Playgroud)

sql triggers insert sql-server-2008

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

为什么SQL Server会舍弃除以两个整数的结果?

我有一个带有smallint列的表,其中包含百分比作为整数(即​​50,75,85等)

当我将此列除以100时,如

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE
Run Code Online (Sandbox Code Playgroud)

结果四舍五入到最接近的整数.例如,对于包含数字"50"的行,我的结果为零.

我可以用一个简单的声明复制它:

SELECT 50 / 100 AS TEST_VALUE
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我怎样才能在结果中获得更高的精确度?

sql-server templates rounding

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

删除超过一天的项目 - SQL Server

在我的数据库的表中,我有一个datatime列,用于存储添加记录的时间.如何在运行存储过程时删除所有超过一天的记录(考虑当前时间)?

sql sql-server datetime

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

在T-SQL UPDATE语句中实现IF条件

使用T-SQL,我想执行一个UPDATE语句,只有在定义了相应的变量时才会设置列.

这是我想要完成的一个简单的伪tsql示例:


--Declaring vars
@ID int,
@Name nvarchar(20),
@Password nvarchar(10)

--Run the update
UPDATE User
SET
IF LEN(@NAME) > 0
  Name = @Name,
IF LEN(@Password) > 0
  Password = @Password
Run Code Online (Sandbox Code Playgroud)

通过阅读IF条件如何在T-SQL中工作,我可以看出,为了完成与上面的伪代码相同的结果,我将不得不为每个IF条件创建一个UPDATE语句 - 这就是我想要的避免不得不这样做.

是否可以仅使用一个UPDATE语句基于条件动态设置字段/列? - 如果是的话,怎么样?

t-sql sql-server conditional

19
推荐指数
1
解决办法
6万
查看次数

在T-SQL UPDATE中,每行的RAND没有区别

我有跟随T-SQL来更新包含测试数据的表:

UPDATE
SomeTable
SET
    Created = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int ) ,
    LastUpdated = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int )
Run Code Online (Sandbox Code Playgroud)

我希望它在过去一年中选择随机daes,不幸的是它每行都使用相同的日期.什么是让它随机更新的最佳方式?

sql t-sql sql-server

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

SQL Server和C#:获取最后插入的id

public static void CreateSocialGroup(string FBUID)
{
    string query = "INSERT INTO SocialGroup (created_by_fbuid) VALUES (@FBUID); SELECT @@IDENTITY AS LastID";

    using (SqlConnection connection = new SqlConnection(ConnectionString))
    {
        SqlCommand command = new SqlCommand(query, connection);
        command.Parameters.AddWithValue("@FBUID", FBUID);

        connection.Open();
        command.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?我如何将LastID输入变量?谢谢

c# sql-server

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

在#tables中使用Object_id()函数

我想确保我的数据库中是否存在临时表.

我试图使用OBJECT_ID()函数,但似乎我不能将它与临时表一起使用.

我该如何解决这个问题?

sql sql-server

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

如何防止在没有主键时使用SqlBulkCopy插入重复记录

我收到一个包含数千条记录的每日XML文件,每条记录都是我需要存储在内部数据库中用于报告和计费的业务事务.我的印象是每天的文件只包含唯一的记录,但发现我对unique的定义与提供者的定义并不完全相同.

导入此数据的当前应用程序是C#.Net 3.5控制台应用程序,它使用SqlBulkCopy进入MS SQL Server 2008数据库表,其中列与XML记录的结构完全匹配.每个记录只有100多个字段,并且数据中没有自然键,或者更确切地说,我可以想出的字段,因为复合键最终也必须允许空值.目前该表有几个索引,但没有主键.

基本上整行必须是唯一的.如果一个字段不同,则它足以插入.我查看了创建整行的MD5哈希,将其插入数据库并使用约束来阻止SqlBulkCopy插入行,但我不知道如何将MD5哈希进入BulkCopy操作而我不是确定整个操作是否会失败并在任何一个记录失败时回滚,或者它是否会继续.

该文件包含大量记录,在XML中逐行进行,查询数据库以查找与所有字段匹配的记录,然后决定插入实际上是我能够看到能够执行此操作的唯一方法.我只是希望不必完全重写应用程序,并且批量复制操作要快得多.

有没有人知道一种方法来使用SqlBulkCopy,同时防止重复行,没有主键?或者有任何建议以不同的方式做到这一点?

c# sql sql-server sqlbulkcopy sql-server-2008

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