我有一张桌子,每位销售人员每天销售1条记录
NAME DATE
joe 1-1-13
joe 1-1-13
joe 1-1-13
dave 1-1-13
joe 1-2-13
Run Code Online (Sandbox Code Playgroud)
我用它来创建和填充表格
create table #sales (name varchar(10), salesdate date )
insert into #sales (name, salesdate)
values ('joe', '01-01-2013'), ('joe','01-01-2013'),
('joe', '01-01-2013'), ('dave','01-01-2013'),
('joe','01-02-2013')
Run Code Online (Sandbox Code Playgroud)
我想要一个查询来提高每个销售人员的销售额百分比
(例如在1-1-13乔售出3个单位共有4个一天(75%),但我不知道SQL怎么能每日总量当天的所有销售的拉涨,无论销售人员
这跟我一样接近.
select name, salesdate, count(*) as "dailyTotal"
from #sales
group by name, salesdate
Run Code Online (Sandbox Code Playgroud)
如何包含每日总计,以便它可用于计算当天的总百分比?
因此,我有一个 SQL 查询,可以毫无问题地从 Active Directory 中提取数据(出于发布目的而精简):
SELECT TOP 901 *
FROM OpenQuery(ADSI, 'SELECT title, displayName, sAMAccountName, givenName, sn
FROM ''LDAP://DC=[STUFF],DC=[MOAR STUFF],DC=com''
where objectCategory = ''Person'' AND objectClass = ''User''')
Run Code Online (Sandbox Code Playgroud)
这会按预期拉取记录。我需要从我们信任的其他域中提取记录,因此我只需要更改 LDAP 字符串。但这样做只会返回一个泛型
“准备查询时发生错误...针对链接服务器“ADSI”**的 OLE DB 提供程序“ADSDSOObject”执行”(消息 7321,级别 16,状态 2)。
我说通用,因为我可以在 SELECT 语句中键入任何内容(将其搞乱),并且我会得到相同的消息。
我尝试过在字符串中使用和不使用 FQDN。我已确认链接服务器使用的登录名具有读取权限。有任何想法吗?
提前致谢!
-卡尔
有没有办法找到 Y 数据库中具有 X 列名称的所有表?
所以
如果 X.Column 存在于 Y.Database 中则打印带有 x.column 的 all.tables
谢谢
我在 SQL Server 2012 企业版 (11.0.2100.60) 上启用变更数据捕获 (CDC)
. 我可以使用以下 SQL 在数据库级别启用它,但无法在表级别启用。
Use DatabaseName
GO
Exec sys.sp_cdc_enable_db
GO
EXEC sys.sp_cdc_enable_table @source_schema = N'dbo'
,@source_name = N'TableName'
, @role_name = NULL
GO
Run Code Online (Sandbox Code Playgroud)
得到错误,如
'msg 22832,级别 16,状态 1,过程 sp_cdc_enable_table_internal,第 623 行
无法更新指示表 [dbo].[TableName] 已为变更数据捕获启用的元数据。执行命令 '[sys].[sp_cdc_add_job] @job_type = N'capture'' 时发生故障。返回的错误为 22836:“无法更新数据库 DatabaseName 的元数据以指示已添加变更数据捕获作业。执行命令“sp_add_jobstep_internal”时发生故障。返回的错误为 14234:“指定的‘@server’无效(sp_helpserver 返回有效值)。”。使用操作和错误来确定失败的原因并重新提交请求。'。使用操作和错误来确定失败的原因并重新提交请求。
有人会帮助我摆脱这种情况吗?
提前致谢..!!
有一个After Insert触发器.正在写入的原始表具有将采用任何数字的数量字段.但是,插入后触发的触发器必须为每个QTY写入一次事务表.因此,如果原始QTY为4,那么当触发器触发时,它必须将记录写入四次.
USE [BLAH]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Track_Change_Detail]
ON [dbo].[MYtABLE]
AFTER Insert
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Declare @Reason varchar(255),
@TransID nvarchar(10),
@Qty bigint,
@UserID nvarchar(10),
@Disp nvarchar(3),
@ItemNumber nvarchar(20),
@ItemLevel nchar(1),
@LocalQTY Int
Declare @curChg Cursor
begin
--insert into BLAH.dbo.Transactions
set @curChg = CURSOR FAST_FORWARD FOR
SELECT inserted.TransiD,
inserted.Item_num,
inserted.Quantity,
inserted.Logged_in,
Inserted.Lvl,
Inserted.Disposition
FROM inserted …Run Code Online (Sandbox Code Playgroud) 我正在尝试Trip #为具有连续天数的客户分配一个记录,如果他们在连续几天中断,并且例如在本月晚些时候到达,则增加旅行ID.数据结构如下所示:
CustomerID Date
1 2014-01-01
1 2014-01-02
1 2014-01-04
2 2014-01-01
2 2014-01-05
2 2014-01-06
2 2014-01-08
Run Code Online (Sandbox Code Playgroud)
基于上述示例数据集的所需输出将是:
CustomerID Date Trip
1 2014-01-01 1
1 2014-01-02 1
1 2014-01-04 2
2 2014-01-01 1
2 2014-01-05 2
2 2014-01-06 2
2 2014-01-08 3
Run Code Online (Sandbox Code Playgroud)
因此,如果该客户的日期是背靠背,则它被认为是相同的旅行,并且具有相同的旅行#.有没有办法在SQL Server中执行此操作?我正在使用MSSQL 2012.
我最初的想法是使用LAG,ROW_NUMBER或OVER/PARTITION BY功能,甚至一个Recursive Table Variable Function.我可以粘贴一些代码,但说实话,我的代码到目前为止还没有.如果这是一个简单的查询,但我只是没有正确地考虑它,那将是很好的.
先感谢您.
我如何选择公司及其子公司的所有员工?
使用SQL Server 2008
雇员
Id | Name | CompanyId
Run Code Online (Sandbox Code Playgroud)
公司
Id | Name | ParentCompanyId
Run Code Online (Sandbox Code Playgroud)
例:
1 Microsoft 0
2微软印度1
3 Microsoft Spain 1
我有下面这个查询,它只给微软的员工,而不是微软的印度和西班牙.
SELECT Id, Name FROM Employee WHERE CompanyId=1
Run Code Online (Sandbox Code Playgroud)
我不擅长SQL.帮助我.
我正在更新sql server表并只更新一条记录.但是我收到消息(1行(s)受影响)这么多次为什么呢?我的查询如下:
UPDATE V2HRMS.dbo.tbl_pm_employee
SET LeavingDate='06-26-2013'
,Status=1
WHERE EmployeeCode=3407
Run Code Online (Sandbox Code Playgroud)
这只是我的知识.
使用微软 SQL
尝试使用 T-SQL 语言创建表。代码非常简单,执行成功,但我在对象资源管理器中没有看到创建的表。尝试重新启动/重新连接/刷新/重新执行 - 结果相同 - 看不到此表。也尝试手动执行(通过在对象资源管理器中的树中右键单击鼠标 - 一切正常 - 可以看到刚刚创建的表)。
代码:
USE tempdb
IF OBJECT_ID('dbo.Employees','U') IS NOT NULL
DROP TABLE dbo.Employees;
CREATE TABLE dbo.Employees
(
empid INT NOT NULL,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
hiredate DATE NOT NULL,
mgrid INT NULL,
ssn VARCHAR(20) NOT NULL,
salary MONEY NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
截屏

觉得这个问题很简单,还是试着找答案,稍微堆叠一下。为什么我没有看到刚刚创建的表?此代码对于创建表是否正确?
今天我试图通过已经存在的数据库恢复数据库,我只需右键单击SSMS中的数据库 - >任务 - >脱机,这样我就可以恢复数据库了.
一个小的弹出窗口出现并显示Query Executing.....了一段时间然后抛出一个错误说Database is in use cannot take it offline.我从中收集了一些与该数据库的活动连接,因此我尝试执行以下查询
USE master
GO
ALTER DATABASE My_DatabaseName
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
Run Code Online (Sandbox Code Playgroud)
此时SSMS再次出现Query Executing.....一段时间,然后抛出以下错误:
Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'My_DatabaseName'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Run Code Online (Sandbox Code Playgroud)
在此之后,我无法通过SSMS连接到数据库.当我尝试使用SSMS脱机时,它抛出一个错误说:
Database is in Transition. Try later .....
Run Code Online (Sandbox Code Playgroud)
在这一点上,我根本无法触摸数据库我尝试过的任何东西返回相同的错误消息Database …
sql-server database-restore database-backups sql-server-2008