سؤال

ونقول لكم الحصول على السجلات كما يلي:

| ID  | Foo  | Bar  | Red  |
|-----|------|------|------|
| 1   | 100  | NULL | NULL |
| 1   | NULL | 200  | NULL |
| 1   | NULL | NULL | 300  |
| 2   | 400  | NULL | NULL |
| ... | ...  | ...  | ...  | -- etc.

وتريد:

| ID  | Foo | Bar | Red |
|-----|-----|-----|-----|
| 1   | 100 | 200 | 300 |
| 2   | 400 | ... | ... |
| ... | ... | ... | ... | -- etc.

هل يمكن استخدام شيء من هذا القبيل:

SELECT
  ID,
  MAX(Foo) AS Foo,
  MAX(Bar) AS Bar,
  MAX(Red) AS Red
FROM foobarred
GROUP BY ID

والآن، كيف يمكن لك إنجاز مماثل عندما فو، بار، والأحمر هي VARCHAR؟

| ID  | Foo      | Bar     | Red     |
|-----|----------|---------|---------|
| 1   | 'Text1'  | NULL    | NULL    |
| 1   | NULL     | 'Text2' | NULL    |
| 1   | NULL     | NULL    | 'Text3' |
| 2   | 'Test4'  | NULL    | NULL    |
| ... | ...      | ...     | ...     | -- etc.

ل:

| ID  | Foo      | Bar     | Red     |
|-----|----------|---------|---------|
| 1   | 'Text1'  | 'Text2' | 'Text3' |
| 2   | 'Text4'  | ...     | ...     |
| ... | ...      | ...     | ...     | -- etc.

ويعمل حاليا في المقام الأول مع SQL Server 2000؛ ولكن الحصول على خوادم عام 2005.

هل كانت مفيدة؟

المحلول

وأنا لا يستطيعون الوصول إلى مربع SQL2K في اللحظة ولكن حدد الحد الأقصى (عمود) ستعمل على nvarchars في عام 2005. والمشكلة الوحيدة ستكون إذا كان لديك قيم نصية متعددة تحت كل عمود لكل معرف في الجدول الأصلي ...

CREATE TABLE Flatten (
    id int not null,
    foo Nvarchar(10) null,
    bar Nvarchar(10) null,
    red Nvarchar(10) null)

INSERT INTO Flatten (ID, foo, bar, red) VALUES (1, 'Text1', null, null)
INSERT INTO Flatten (ID, foo, bar, red) VALUES (1, null, 'Text2', null)
INSERT INTO Flatten (ID, foo, bar, red) VALUES (1, null, null, 'Text3')
INSERT INTO Flatten (ID, foo, bar, red) VALUES (2, 'Text4', null, null)



SELECT 
    ID, 
    max(foo),
    max(bar),
    max(red)
FROM
Flatten
GROUP BY ID

وعوائد

ID          Foo        Bar        Red
----------- ---------- ---------- ----------
1           Text1      Text2      Text3
2           Text4      NULL       NULL

نصائح أخرى

والاستعلام كان لديك أعلاه يعمل على ما يرام لحقول VARCHAR كما فعلت لحقول INT. المشكلة مع الاستعلام الخاص بك هو على الرغم من أن إذا كان لديك صفين مع نفس الهوية، وكلا من تلك الصفوف كان شيئا في عمود "فو"، وعندئذ فقط واحد وفقا لأعلى قيمة (سواء بالنسبة للINT وVARCHAR) سيتم عرضها .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top