好吧,这听起来有点奇怪,但我需要做的很简单.我有一个公司列表,每个公司都有一个描述.该网站有4种语言版本.我的问题来自于我用英语列出一家公司,但负责翻译法语的人仍然没有翻译,所以我有一个简单的说法:
SELECT TOP(6)
company.name,
company.description,
company.address
WHERE
langid=1
ORDER BY
company.id DESC
Run Code Online (Sandbox Code Playgroud)
真正的查询更复杂,但我认为用这个来理解问题会更容易.我需要做的是,当langid 2中的描述为空时,然后向我显示langid 1,因为langid 1总是第一个将被添加的.我不想将描述字段显示为空.
想象第1行,第2行,第3行和第5行都有langid 2的描述,但没有第4行和第6行的描述.我需要为包含它的行显示langid 2,但对于没有描述的行,则需要langid 1.
我知道我可能会用@i字段递增并在临时表中逐个插入结果,但有没有更好的方法呢?
如何重写查询" 从tbl1中选择col1 ",以便将结果拆分为三列 - 每列垂直排序结果?
所以,如果我收到的数据是:
aaa
bbb
ccc
ddd
eee
fff
ggg
Run Code Online (Sandbox Code Playgroud)
我需要查询将其返回为:
aaa ddd ggg
bbb eee
ccc fff
Run Code Online (Sandbox Code Playgroud)
这可能吗?谢谢
我正在尝试编写一个查询,以查看工程师是否在约定的时间段内访问了他的工作.
表格截图http://img24.imageshack.us/img24/1156/capturebcn.jpg
这是我目前的查询:
SELECT
v.[VISITDATE],
CONVERT(VARCHAR, v.[STARTTIME], 105) AS 'Startdate',
CONVERT(VARCHAR, v.[STARTTIME], 108) AS 'StartTime',
CONVERT(VARCHAR, v.[bookeddate], 105) AS 'BookedDate',
CONVERT(VARCHAR, t.[starttime], 108) AS 'TimeSlotStart',
CONVERT(VARCHAR, t.[endtime], 108) AS 'TimeSlotEnd',
v.[Status]
FROM
[tbl_repair_visit] v
INNER JOIN [ltbl_TimeSlots] t ON v.timeslot = t.[Slot]
Run Code Online (Sandbox Code Playgroud)
该'StartDate'和'StartTime'是工程师去的日期和时间.
'BookedDate'是他应该去的日期,'TimeSlotStart'并'TimeSlotEnd'定义了他应该已经开始工作的时间跨度.所以我需要一个True/False值的列来说明他是否进入了正确的时间.
我有一张桌子.该表需要存储一个关于某个位置的数字值,所以最初我只有两个没有递增列的列,给出以下内容:
RefID | TypeID
1 | 1
1 | 3
1 | 6
2 | 3
3 | 5
3 | 6
Run Code Online (Sandbox Code Playgroud)
第一列是位置的参考,第二列是实际值.
问题是如何确定给第一列的值.我的想法是添加一个自动递增字段来生成这些值,所以我将改为以下数据:
ID | RefID | TypeID
1 | 1 | 1
2 | 1 | 3
3 | 1 | 6
4 | 4 | 3
5 | 5 | 5
6 | 5 | 6
Run Code Online (Sandbox Code Playgroud)
因此,自动编号列(第1列)充当参考列的种子.
所以我有两个问题 - 将标识列值复制到引用列,并将引用值返回给应用程序,以便在该位置有多个值时可以使用它.
我想出了这个存储过程:
CREATE PROCEDURE [dbo].[AddCaseType]
(
@TypeID INTEGER,
@CaseID INTEGER = NULL OUT
)
AS
BEGIN
INSERT INTO …Run Code Online (Sandbox Code Playgroud) 我有一个包含许多数据库的Microsoft SQL Server 2008,其中大多数都有一个Logs表.我希望能够安排一个脚本来运行并截断每个数据库中的Logs表(动态).我想我必须得到每个用户数据库的名称,然后在包含Logs表的数据库中截断表Logs.
我最终使用的声明是:
EXEC sp_MSForEachDB 'Use [?]; IF EXISTS (SELECT * FROM sys.tables WHERE name = "Logs" and type="U")TRUNCATE TABLE Logs'
Run Code Online (Sandbox Code Playgroud) 我有一个Sales表,其中包含以下列:
现在我想要SUM最后15行,所以我现在正在做:
SELECT TOP 15 SUM(amount) FROM Sales ORDER BY [Date] DESC
Run Code Online (Sandbox Code Playgroud)
但是我明显得到了15行,有没有办法可以总结它而不必在客户端循环并将其SUM化?
我正在使用遗留数据库,其中包含"item"和"desc"等列(用于描述).
显然,尝试执行有序选择时存在问题,例如:
SELECT item, desc FROM blah ORDER BY desc
Run Code Online (Sandbox Code Playgroud)
目的是做一个升序的列"desc",但SQL服务器变得困惑,因为desc也是一个修改器的顺序...如何逃避字段名称,使其正常工作?我是否必须选择该列的第二个副本作为其他名称才能在订单中使用?
当我在VarChar列上的SQL Server 2008数据库中创建索引时到底发生了什么.这显然是一个文本专栏.
是自动全文索引还是创建不同类型的索引?
我有一个表格,我想要提取出一列并放入一个单独的表格中.
例如,假设我有一个名为Contacts的表.Contacts有一个名为Name的列,用于存储字符串.现在我想将名称拉出到另一个名为Name的表中,并将Contact.Name列链接到Name表的Id.
我只能用SQL来做这件事.关于最佳方式的任何想法?
如果我能澄清一下,请告诉我,谢谢!
[编辑]一个问题是不同的联系人可以绑定到相同的名称.所以当不同联系人具有相同的名称和它被导出的名称表将只拥有该名称的一个唯一的行和所有联系人将指向该行.我想如果我实际上正在编写一本联系簿,这是没有意义的,但我只是用它来说明我的问题.
考虑一个SQL Server 2005数据库,其中包含很多人的大量数据,其中很大一部分已经结婚.为了跟踪人与人之间的关系,存在一个关系表,用于将一个人的ID与另一个人的ID相关联.每个关系记录上的关系类型用于指示两个人之间存在的关系类型(duh):"已婚","是儿子","是"的女儿,等等.
对于已婚人士,表中有两个关系记录 - 一个显示人A与人B结婚,另一个记录显示人B与人A结婚.对于婚姻,虽然在数据库中存在一些未经回复的记录,但是没有两个记录将被视为错误.(这是一种继承的设计,我没有改变这种方法的自由.)
RelID Person1 Person2 RelationshipType
-----------------------------------------
1 1001 1010 Married //Reciprocated by RelID 4
2 1002 1011 Married //Reciprocated by RelID 5
3 1003 1012 Married //Reciprocated by RelID 6
4 1010 1001 Married //Reciprocated by RelID 1
5 1011 1002 Married //Reciprocated by RelID 2
6 1012 1003 Married //Reciprocated by RelID 3
7 1004 1013 Married //Not properly reciprocated
Run Code Online (Sandbox Code Playgroud)
我需要做的是从表中提取独特的已婚夫妇.
我创建了一个名为GetOrderedPair(val1,val2)的函数 …
t-sql ×10
sql ×7
sql-server ×6
aggregate ×1
asp.net ×1
case ×1
ddl ×1
dml ×1
multilingual ×1
select ×1