1

次のようなデータがあります。同じ列のデータでnull列を更新したいのですが、同じ列のnullではない行を使用します。

DECLARE @tbl TABLE(Country NVARCHAR(100), County NVARCHAR(100),
                     Street NVARCHAR(100), Name NVARCHAR(100))
INSERT INTO @tbl 
VALUES('England', 'County1', 'A Street', 'James'),
('', '', '', 'Deen'),
('', '', 'B Street', 'Adam'),
('', '', 'C Street', 'Max'),
('', 'County2', 'Y Street', 'Dax'),
('', '', '', 'Dax'),
('', '', '', 'Pax'),
('France', 'County i', 'Street ix', 'Chris'),
('', '', '', 'Crai'),
('', '', '', 'Adam')

更新後、テーブルは次のようになります。

DECLARE @tbl TABLE(Country NVARCHAR(100), County NVARCHAR(100),
                     Street NVARCHAR(100), Name NVARCHAR(100))
INSERT INTO @tbl 
VALUES('England', 'County1', 'A Street', 'James'),
('England', 'County1', 'A Street', 'Deen'),
('England', 'County1', 'B Street', 'Adam'),
('England', 'County1', 'C Street', 'Max'),
('England', 'County2', 'Y Street', 'Dax'),
('England', 'County2', 'Y Street', 'Dax'),
('England', 'County2', 'Y Street', 'Pax'),
('France', 'County i', 'Street ix', 'Chris'),
('France', 'County i', 'Street ix', 'Crai'),
('France', 'County i', 'Street ix', 'Adam')

SELECT * FROM @tbl

これをExcelシートから読んでいます。これが不可能な場合は、Excelシートの最初の列にIDなどの行番号を追加するようにユーザーに依頼できます。それは機能しますか?

ありがとう!

4

2 に答える 2

1

テーブル内のエントリは順序付けされていないため、自分で順序を定義しない限り、それを行うことはできません(「orderby」を使用)。

于 2013-03-06T11:21:55.940 に答える
0

CTEでオプションを使用できます

 ;WITH cte AS
 (
  SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS Id
  FROM tbl
  ), cte2 AS
 (
  SELECT Id, Country, County, Street, Name
  FROM cte
  WHERE Id = 1
  UNION ALL
  SELECT c.Id, COALESCE(c.Country, c2.Country), 
               COALESCE(c.County, c2.County), 
               COALESCE(c.Street, c2.Street), c.Name
  FROM cte c JOIN cte2 c2 ON  c.Id = c2.Id + 1
  )
  UPDATE c
  SET c.Country = c2.Country,
      c.County = c2.County,
      c.Name = c2.Name,
      c.Street = c2.Street
  FROM cte c JOIN cte2 c2 ON c.Id = c2.Id

SQLFiddleのデモ

于 2013-03-06T11:22:48.003 に答える