我的sql 陳述句功底不是很好,所以想鍛煉下,哪個大哥或者姐姐,又這樣的題嗎?我想練習下
uj5u.com熱心網友回復:
--1.建表
CREATE TABLE #T
(
id INT,
[name] VARCHAR(10),
[for] INT,
[left] INT,
[right] INT
)
--2.插入資料
INSERT INTO #T VALUES(1, '小小', 0, 3, 2)
INSERT INTO #T VALUES(4, '笑笑', 2, 8, 9)
INSERT INTO #T VALUES(5, '琦琦', 2, 13, 0)
INSERT INTO #T VALUES(2, '琪琪', 1, 5, 4)
INSERT INTO #T VALUES(3, '曉曉', 1, 6, 7)
INSERT INTO #T VALUES(6, '兵兵', 3, 10, 11)
INSERT INTO #T VALUES(7, '冰冰', 5, 0, 12)
INSERT INTO #T VALUES(8, '公主', 4, 0, 0)
INSERT INTO #T VALUES(9, '筱筱', 4, 0, 0)
INSERT INTO #T VALUES(10, '姍姍', 6, 0, 0)
INSERT INTO #T VALUES(11, '珊珊', 6, 0, 0)
INSERT INTO #T VALUES(12, '微微', 7, 0, 0)
INSERT INTO #T VALUES(13, '薇薇', 5, 0, 0)
根據上面的資料,查詢得到下圖
uj5u.com熱心網友回復:
有產品表product(id int identity,cid int,name nvarchar(50),pubtime datetime)有企業表company(cid int identity,name nvarchar(50))
有服務表company_service(sid int identity,cid int,service_type id,s_begin date,s_end date)
按照服務級別service_type倒序排列每個企業的產品
例如:a企業,有產品a1,a2,a3,級別為6,b企業,有產品b1,b2,級別為4,c企業,有產品c1,c2,c3,c4,c5
最終排序為
a1,b1,c1,a2,b2,c2,a3,c3,c4,c5
uj5u.com熱心網友回復:
輸入一個數(比如8),得到如下查詢結果:
uj5u.com熱心網友回復:
請撰寫一個存盤程序,實作輸入漢字,列印如下影像
uj5u.com熱心網友回復:
請撰寫一個存盤程序,輸入一個大于2的奇數(比如11),得到下圖(橫豎對角線和相等)
不曉得復雜度夠不,按理難著不會,會者不難
exec sp_MSJZ 11

uj5u.com熱心網友回復:
楊輝三角形?兔子數列,九九乘法表,等等uj5u.com熱心網友回復:
樓主不要忘了把最后的sql陳述句貼出來,給其他人學習下也是好的uj5u.com熱心網友回復:
這玩意完全沒說明。。。。猜了半天才猜明白left和right干嘛的。。。
with t as (
select id,name,[for] f,[left] l,[right] r from #t
),t1 as (
select a.*,isnull(c.id,isnull(b.id,0)) as parent from t a
left join t b on a.id=b.l
left join t c on a.id=c.r
),t2 as (
select *,0 as lv,0 as loc from t1 where parent=0
union all
select a.*,lv+1,(case when a.id=b.l then -1*power(2,2-lv) else power(2,2-lv) end)+b.loc from t1 a,t2 b where a.parent=b.id
),t3 as (
select lv+1 as id,loc+abs((select min(loc) from t2))+1 as loc,name from t2
)
select isnull([1],'') as [1],isnull([2],'') as [2],isnull([3],'') as [3],isnull([4],'') as [4],isnull([5],'') as [5],isnull([6],'') as [6],isnull([7],'') as [7],isnull([8],'') as [8]
,[9],[10],[11],[12],[13],[14],[15]
from t3
pivot(
max(name) for loc in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15])
) p
問題是有個小疑問啊,如果我不知道最終有多少資料,那么行列轉換這里必須用exec了,不能一個陳述句實作,另外就是,如果不知道有多少層,t2里的power的初始量也有問題啊
給個答案,讓我參考下
uj5u.com熱心網友回復:
--這個是先創建計算排列和組合的函式,然后陳述句里計算每個點的值和位置,再行列轉換得到結果
Declare @A int=8;
Declare @w nVarchar(3000)=''
Declare @s nVarchar(3000)=''
Declare @sql nvarchar(4000)=''
Select
@w=@w+',['+number+']',
@s=@s+',isnull(['+number+'],'''') As ['+number+']'
From
(
Select convert(Varchar(10),number) As number
From master.dbo.spt_values
Where type='P' and number between 1 and 2*(@A+1)
) S
Set @sql=
'
With T
As
(
Select number From master.dbo.spt_values
Where type=''P'' And number between 1 and @A+1
)
Select '+Stuff(@s,1,1,'')+' From
(
Select A.number*[email protected] As A,B.number As B,
Convert(Varchar(10),nullif(dbo.fn_c(A.number-1,b.number),0)) As C
From T A cross join T B
Where b.number<=@A
) s
Pivot
(
max(c)
for
A in('+Stuff(@w,1,1,'') +')
)p'
exec sp_executesql @sql,N'@A int',@A
--排列
Create Function fn_p(@I int)
Returns int
As
Begin
Declare @Rst int=1
While @I>0
Begin
Set @Rst=@Rst*@I
Set @I=@I-1
End
Return @Rst
end
go
--組合
Create Function fn_c(@n int,@m int)
Returns int
As
Begin
return dbo.fn_p(@m)/(dbo.fn_p(@n)*dbo.fn_p(@m-@N))
End
go
uj5u.com熱心網友回復:
那個魔術矩陣的是先創建N行N列的表,多加一列id列,并插入N行資料
然后開始開始填充資料
首先在最上面一行的中央填入1
然后以遞增的順序將后面的數字放入上面一行靠右一列的方格中
這種放置是可以環繞的,當下一個計算出來的位置的行數超出最上面一行的時候
就回傳下一行,列數超出最右邊就回傳最左邊,按此計算方法
如果計算出來的下一個位置已經被填充,就將下一個位置改為前一個位置的正下方
直到N*N
uj5u.com熱心網友回復:
上面這些對聯系基本真的有點難
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/146751.html
標籤:基礎類
上一篇:滑膜控制
